Repository navigation
WinSecHunter 2.1.0
Production hardening and the reporting surface an incident responder was missing.
This release also fixes three defects that made normal collection fail outright.
Highlights
- 20 cmdlets — collection, analysis, enrichment, reporting and evidence in one module.
- Per-channel execution — a missing Sysmon/RDP/firewall log is
Skipped, not a failed sweep.
WinSecHostResult.LogDetailsexplains every channel. - Incident report — Executive / Technical / Full templates, Markdown and a self-contained HTML
document with verdict, severity, confidence, timeline, findings, IOCs, sessions and custody. - Abuse report — RFC 5322
.emlready to send, abuse desk resolved from ASN/PTR, evidence
attached as base64, consistent account pseudonyms with-RedactAccounts. - IOC export — CSV, grep-friendly text, JSON and STIX 2.1.
- Evidence integrity — SHA-256 manifest, verification, and detection of files added after export.
- Case re-import — typed events restored for follow-up work.
New cmdlets
| Cmdlet | Purpose |
|---|---|
Show-WinSecHunterHelp |
whole-toolkit reference, one cmdlet, or Markdown |
New-WinSecIncidentReport |
Executive / Technical / Full report to Markdown + HTML |
New-WinSecAbuseReport |
RFC 5322 .eml, Markdown, JSON for the source network |
Export-WinSecIocList |
CSV / TXT / JSON / STIX 2.1 |
Test-WinSecEvidenceIntegrity |
verify hashes; detect modified, missing and added files |
Import-WinSecCase |
reopen a bundle with typed events |
Fixed
- Collection crashed whenever no time window was supplied (
[AllowNull()][datetime]cannot bind$null). - Every
-ComputerNamesweep aborted on aForEach-Object -Parallelscriptblock restriction. -PassHostStatusoutput was lost when a channel was unavailable.- OTX endpoint corrected; IPv6 attribution cache used an illegal file name.
config.jsonis now written atomically; empty coverage timestamps no longer crash export.-RedactAccountsnow also masks account names inside attached CSV/JSON evidence.- Localized
auditpol /rheaders no longer break audit-policy analysis.
Install
$version = '2.1.0'
$zip = Join-Path $env:TEMP "WinSecHunter-$version-module.zip"
Invoke-WebRequest "https://github.com/paulmann/Get-Windows-Security-Events-By-IP/releases/download/v$version/WinSecHunter-$version-module.zip" -OutFile $zip -UseBasicParsing
Expand-Archive -LiteralPath $zip -DestinationPath (Join-Path $env:TEMP "WinSecHunter-$version") -Force
Import-Module (Join-Path $env:TEMP "WinSecHunter-$version/WinSecHunter/$version/WinSecHunter.psd1") -Force
(Get-Module WinSecHunter).ExportedFunctions.Count # 20
@(Get-WinSecEventCatalog).Count # 156Or from the repository:
git clone https://github.com/paulmann/Get-Windows-Security-Events-By-IP.git
cd Get-Windows-Security-Events-By-IP
./build/Install-Dev.ps1 -Force
Show-WinSecHunterHelpAssets
WinSecHunter-2.1.0-module.zip— validated module package (imports in a clean child process).Get-SecurityEventsByIP.ps1— the legacy v5.0.2 script, preserved for continuity only.
It was removed frommain; the module replaces it and is the supported path.
Verification
./build/validate.ps1 -Tests # 168 passed, 0 failed, 1 skipped; PSScriptAnalyzer 0/0Documentation
- Repository: https://github.com/paulmann/Get-Windows-Security-Events-By-IP
- Wiki: https://github.com/paulmann/Get-Windows-Security-Events-By-IP/wiki
- Agents: https://github.com/paulmann/Get-Windows-Security-Events-By-IP/blob/main/AGENTS.md
- Changelog: https://github.com/paulmann/Get-Windows-Security-Events-By-IP/blob/main/CHANGELOG.md
Found a bug? Please open an issue:
https://github.com/paulmann/Get-Windows-Security-Events-By-IP/issues/new/choose
Checksums (SHA-256)
| Asset | SHA-256 |
|---|---|
WinSecHunter-2.1.0-module.zip |
6A2490FF93C35D51395C120264BAA798783E4CBC06516CF1E1BAC33F321C00DE |
Get-SecurityEventsByIP.ps1 |
5ECCC009BDF04885E1E36313BEE13EF299942F4A32A3A2339C1C0E42AC1BA375 |