我正在使用Powershell中的PSEventViewer包,從安全日志中提取登錄事件。 該包有一個名為-NamedDataExcludeFilter的引數,我用它來跳過各種系統級ID。 然而,我不能跳過所有的UMFD-xx和DWM-xx,因為xx數字不同。 我想過濾掉所有UMFD*和DWM*值。 說實話,我對Powershell是一個相對陌生的新手。 我做了30多年的開發人員,但我一直堅持使用DOS的cmd,當我可以時。 我知道這一定是一個簡單的解決方案,但我找不到一個有效的解決方案。
$FromDate=(Get-Date).AddSeconds(-3)
$ToDate = Get-Date
$L = Get-Events -LogName 'Security' -Id 4625, 4647,4648 -DateFrom $FromDate -DateTo $ToDate `.
-NamedDataExcludeFilter @{ 'TargetUserName' = 'System','Network Service', 'Local Service' } | `
排序-Object TimeCreated
if ( $L.Count -ne 0 )
{
"From: ", $FromDate, " to ", $ToDate !
Out-File -FilePath C:UsersScomageDocumentsSecLog.txt -Append -Width 500 -NoNewline
$L | Format-Table -Property Date, Id, LogonType, LogonProcessName, TargetUserName, IpAddress, IpPort, TargetLogonId, Action, KeywordDisplayName| `
Out-File -FilePath C:UsersScomageDocumentsSecLog.txt -Append -寬度 500 -Width
}
$L陣列將非常小,所以一個額外的過濾器回圈應該非常快,即使最好的解決方案是直接納入過濾器。 我們歡迎任何建議。
uj5u.com熱心網友回復:
我不知道這個包,據我所知它在后臺使用Get-WinEvent。所以你可能可以用一些XML查詢來代替你現在所做的。如果你確定結果陣列不會很大,我建議使用不需要 XML 的簡單解決方案。
檢索資料后的簡單過濾可以是這樣的:
$L = Get-Events -LogName 'Security'/span> -Id 4625, 4647,4648 -DateFrom $FromDate -DateTo $ToDate `.
-NamedDataExcludeFilter @{ 'TargetUserName' = 'System','Network Service', 'Local Service' } | `
Where-Object { $_.Id -notmatch "^(UMFD|DWM)" } | `
排序-Object TimeCreated
Where-Object采取腳本塊,過濾掉以UMFD或DWM開頭的Id行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326691.html
標籤:
