これは特定の時間のイベントログを取得するスクリプトです。スクリプトを実行すると遅延が発生します
$time = Get-WinEvent microsoft-windows-dns-client/operational -MaxEvents 1 |
Select-Object @{name="time"; expression={$_.timecreated.tostring("yyyy-MM-dd hh:mm:ss")}} |
Select-Object -ExpandProperty time
Get-WinEvent microsoft-windows-dns-client/operational |
Where-Object {$_.timecreated.tostring("yyyy-MM-dd hh:mm:ss") -eq "$time"}
私がスクリプトを実行すると、結果が表示されます。
60秒以上経過するとスクリプトが終了します。
私の間違いは何ですか?
[2つ目の質問]
このPowerShellのバグですか?
この状況では、ショーの結果後にスクリプトが終了しないことがあります。
3秒以下、画像のこの結果のために必要とされます。
なぜ遅いですか?
powershellには時間条件に関するバグがありますか?
私はこの問題を解決したと思います。ありがとうgms0ulman。
while($true) {
$QUERY = @"
<QueryList><Query><Select Path='Microsoft-Windows-DNS-Client/Operational'>
*[System/EventID = 3006] and
*[System/TimeCreated[timediff(@SystemTime) <= 60000]] and
*[EventData/Data[@Name='QueryType'] != 28]
</Select></Query></QueryList>
"@
$CMD = (Get-WinEvent -FilterXml $QUERY).count 2>$null
if($CMD -ne 0) {
$LOG_LIST = Get-WinEvent -FilterXml $QUERY | Select-Object timecreated, processid, message | Sort-Object timecreated
foreach($LOG in $LOG_LIST) {
$TIMESTAMP = $LOG | Select-Object -ExpandProperty timecreated
$TIMESTAMP_SPLIT = $TIMESTAMP -split " "
$LOG_DATE = $TIMESTAMP_SPLIT[0]
$LOG_TIME = $TIMESTAMP_SPLIT[1]
$PROC_ID = $LOG | Select-Object -ExpandProperty processid
$PROC_NAME = Get-Process -id $PROC_ID | Select-Object -ExpandProperty processname
$MSG = $LOG | Select-Object -ExpandProperty message
$URL_1 = $MSG -replace '^\S{2}\s([^,]+).+','$1'
$URL_2 = $URL_1 -replace '^.*?([^.]+\.[^.]+\.?|[^.]+\.(ac|co|go|ne|nm|or|pe|re)\.[^.]+\.?)$','$1'
$LOG_SET = "$LOG_DATE`t$LOG_TIME`t$PROC_ID`t$PROC_NAME`t$URL_1`t$URL_2"
$LOG_SET >> C:\dns.csv
}
}
Start-Sleep 60
}
次のコマンドを検討してください: '1.e9 |?{$ _- lt10} '。他の数字が条件にマッチする可能性がないので、あなたはそれがすぐにプリント「9」として戻ることを期待していますか?または、それは処理し、他のすべての数字を破棄する必要がありますが、時間がかかりますか? – PetSerAl
@PetSerAlスクリプトはすべての結果を表示しますが、ただちに終了しません。私はショー結果の直後にスクリプトを終了したい。 –
しかし、そのスクリプトが既にすべての***結果を表示していることをどのように知っていますか?もっと重要なのは、スクリプトがそれをどのように知ることができるかです。 – PetSerAl