運行 Get-WinEvent 可以使用通配符:
Get-WinEvent -filterhashtable
@{logname="*";providername="*cluster*";starttime="04.01.2022";endtime="05.31.2022";level=2} -
ErrorAction SilentlyContinue
但僅對 logname 和 providername 使用通配符(令人驚訝的是)不會回傳任何記錄:
Get-WinEvent -filterhashtable
@{logname="*";providername="*";starttime="04.01.2022";endtime="05.31.2022";level=2} -
ErrorAction SilentlyContinue
所以:如何在給定的時間跨度內從每個提供者的每個日志中搜索所有錯誤?
uj5u.com熱心網友回復:
我將如何使用 foreach-object 回圈來做到這一點。所有日志名應涵蓋所有提供者。在 powershell 7 中,您可以執行 foreach-object -parallel,它花了我不到 2 秒的時間。嘗試列舉級別;我很驚訝它仍然需要轉換為 int。
get-winevent -listlog * -ea 0 |
% -parallel { Get-WinEvent @{logname=$_.logname;
starttime='4/1'; endtime='5/31';
level=[int][Diagnostics.Tracing.EventLevel]::Error} -ea 0 }
uj5u.com熱心網友回復:
StartTime并且EndTime應該是 type DateTime,但您提供的字串可能會或可能不會轉換為 datetime 物件。
請參閱Get-WinEvent引數-FilterHashtable
*由于為引數提供單個通配符LogName并且ProviderName顯然不起作用,因此您可以首先檢索系統中存在的所有有效日志名和提供程式名稱作為字串陣列并使用它們:
# get an array of all Log names
$logNames = [string[]](Get-WinEvent -ListLog *).LogName
# below line is bound to give you exceptions, so use SilentlyContinue
$logProviders = [string[]](Get-WinEvent -ListProvider * -ErrorAction SilentlyContinue).Name
$startDate = (Get-Date -Year 2022 -Month 4 -Day 1).Date # set to midnight
$endDate = $startDate.AddMonths(2).AddDays(-1) # calculate 2 months duration
$filter = @{LogName=$logNames; ProviderName=$logProviders; StartTime=$startDate; EndTime=$endDate; Level=2}
Get-WinEvent -FilterHashtable $filter -ErrorAction SilentlyContinue
使用開始和結束日期作為字串,如"04.01.2022" MAY在您的系統中作業,但如果您在世界的不同地方,因此使用不同的系統區域設定,這些字串很可能無法轉換為 DateTime 物件。因此,始終最好使用檔案中所述的正確資料型別。
根據檔案引數 LogName:
“Get-WinEvent cmdlet 查詢限制為 256 的 Windows API。這會使一次過濾所有日志變得困難。您可以通過使用回圈遍歷每個日志來解決此問題”,
也許更好地使用像這樣的回圈
# below line is bound to give you exceptions, so use SilentlyContinue
$logProviders = [string[]](Get-WinEvent -ListProvider * -ErrorAction SilentlyContinue).Name
$startDate = (Get-Date -Year 2022 -Month 4 -Day 1).Date # set to midnight
$endDate = $startDate.AddMonths(2).AddDays(-1) # calculate 2 months duration
Get-WinEvent -ListLog * | ForEach-Object {
$filter = @{LogName=$_.LogName; ProviderName=$logProviders; StartTime=$startDate; EndTime=$endDate; Level=2}
Get-WinEvent -FilterHashtable $filter -ErrorAction SilentlyContinue
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/488534.html
標籤:电源外壳
