Ceci est mon script pour obtenir le journal des événements d'une heure spécifique.Un délai se produit lorsque je lance le script
$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"}
Si j'exécute le script, affiche les résultats.
Le script se ferme au bout de 60 secondes ou plus.
Quelle est mon erreur?
[deuxième question]
Est-ce bug Powershell?
Cette situation est que le script ne se ferme pas après l'affichage des résultats.
3 secondes sont nécessaires pour ce résultat de l'image ci-dessous.
Pourquoi si lent?
Est-ce que PowerShell a un bug sur l'état du temps?
Je pense avoir résolu ce problème. Merci à 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
}
Considérez la commande suivante: '1..1e9 |? {$ _- lt10}'. Est-ce que vous vous attendez à ce qu'il revienne immédiatement à l'impression «9», car aucun autre numéro ne peut correspondre à la condition? Ou devrait-il traiter et rejeter tous les autres numéros, ce qui prendra du temps? – PetSerAl
@PetSerAl Mon script affiche tous les résultats, mais ne sort pas immédiatement. Je veux quitter le script immédiatement après avoir affiché les résultats. –
Mais, comment savez-vous que le script affiche déjà *** tous *** les résultats? Plus important encore, comment le script peut-il le savoir? – PetSerAl