Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

Hash funktioniert mit Start-Job und Get-Winevent nicht wie erwartet

$
0
0

Hallo,

ich möchte mit get-Winevent diverse Event-Logs auf einem Computer auslesen. Die Logs sollen mit Start-Job "parallel"  ausgelesen werden. Dafür wird in einem Foreach-Block für jedes Log mit Start-Job ein Task mit Get-WinEvent gestartet.
Zum Filtern der Events wird Get-WinEvent das Hash $Filter übergeben. In dieses Hash wird bei jeden Durchlauf der zu filternde  LogName eingetragen. Dies funktioniert so weit - und wiederum auch nicht :-( Als Ergebnis bekomme ich 2 Tasks, die beide Events des "letzten" Logs (Application) enthalten. Hier das Skript und der Output:

$ComputerName = "localhost"
$Jobs = @()
$Logs = 'system', 'application'

$Filter = @{StartTime = ((Get-Date).AddMinutes(-90))}

$Logs | ForEach-Object {
   $Filter['LogName'] = $_

   # Testausgabe LogName + Filter Anfang
   '*' * 40
   "LogName: $_"
   "`nFilter:"
   $Filter
   '*' * 40
   Testausgabe LogName + Filter Ende

   $Jobs +=Start-Job -ScriptBlock {Get-WinEvent -FilterHashtable $Args[0] -ComputerName $Args[1] -MaxEvents 1} -ArgumentList $Filter, $ComputerName
}

$Null = Wait-Job $Jobs
# Ausgabe EventLogs
Receive-Job $Jobs |FT -AutoSize LogName, Id
Remove-Job $Jobs

# Output:

****************************************
LogName: system

Filter:

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
LogName                        system
StartTime                      06.07.2018 13:31:16                                                                                                                                                                                                               
****************************************
****************************************
LogName: application

Filter:
LogName                        application
StartTime                      06.07.2018 13:31:16                                                                                                                                                                                                               
****************************************

LogName     Id
-------     --
Application  1Application  1

Im Output kann man sehen, wie in jedem Durchlauf der LogName im Hash $Filter aktualisiert wird und trotzdem bekomme ich als Ergebnis nur 2x die Events von Application.

Warum bekomme ich von Get-WinEvent nicht alle Logs ausgegeben, obwohl $Filter immer den aktuellen Lognamen enthält?

Kurios wird es für mich, wenn ich die Zeile
$Filter = @{StartTime = ((Get-Date).AddMinutes(-90))}
an den Beginn des Foreach-Block verschiebe. Denn dann funktion
iert das Skript wie gewünscht.

Kann mir bitte jemand dieses Verhalten erklären?

Danke und ein schönes Wochenende

Christoph

Edit:

Hier noch ein paar Anmerkungen:
Der Parameter FilterHashTable von Get-WinEvent erwartet ein Hash mit bis zu 11 vorgegebenen Schlüssel und entsprechenden Werten. Mit diesen Keys/Values können dann Eventlogs nach bestimmten Eigenschaften durchsucht werden. Ich verwende hier die Schlüssel StartTime und LogName im Hash $Filter. StartTime filtert die Log-Eigenschaft TimeCreated und LogName legt das zu durchsuchende Log fest.
Der Wert des Schlüssels LogName wird nun in jeden Foreach-Durchlauf auf einen neuen Wert aus dem Array $Logs gesetzt. Wie der Output zeigt, wird $Filter jedesmal entsprechend geändert. Was nicht zu funktionieren scheint, ist die Übergabe von $Filter durch Start-Job an Get-Winevent. Get-WinEvent arbeitet immer mit dem letzten Element von $Logs, in diesem Fall Application.







Viewing all articles
Browse latest Browse all 2314