Aus der von Windows erzeugten Datei werden dann die ersten 3 Zeilen entfernt, damit die Datei problemlos direkt per XMLport/Dataport weiterverarbeitet werden kann.
Die erzeugte Datei enthält die Daten, die hier in der Ereignisanzeige sonst manuell eingesehen werden können.
Die Spaltenformatierung kann man beim Cmdlet Get-Eventlog optional vorgeben (format-table -Property Timewritten,Index,Source,InstanceID,Message -Wrap -AutoSize) es gibt außer beim Zeitstempel aber keine feste Spaltenbreite, diese hängt von den aktuellen Fehlern ab. Über -Wrap -AutoSize verhindert man das sonst auftretende Abschneiden der Fehlermeldungen.
Die Anzahl der Rückschautage in der Datei (hier 7) wird über -After (Get-Date).AddDays(-7) eingestellt. Falls außer Fehlern (-EntryType -eq "Error" ) noch mehr ins Protokoll soll, kann man natürlich auch weitere Filter setzen (Information, FailureAudit, SuccessAudit, Warning) oder diese auch ganz weglassen. In diesen Fällen muss der EntryType bei der Spaltenauflistung nach Format-Table dann natürlich noch mit dazu genommen werden.
Bitte beachten, dass das Verwenden von Out-GridView bei Remotesessions nicht möglich ist. Bei lokalen Sessions kann man sich das Fehlerprotokoll dagegen statt in die Datei ins GridView holen (also statt Out-File -filepath … dann Out-GridView). Bei Out-GridView das Format-Table in der Pipeline weglassen, da hier die Fehlermeldung mitsamt der anderen Spalten in einer Zeile ohne Umbruch und Abschneiden untergebracht wird.
Das Passwort zur Anmeldung wird im Skript aus einer verschlĂĽsselten Datei ausgelesen, die Grundlagen dazu stehen hier.
Oben die erzeugte Rohdatei mit SpaltenĂĽberschriften, unten die Datei ohne SpaltenĂĽberschriften zur Weiterverarbeitung.
- Code: Alles auswählen
$User = 'MyDomain\administrator'
$pwFile = "X:\MyEncryptedPasswordFile.txt"
$cred = New-Object -TypeName System.Management.Automation.PSCredential ` -ArgumentList $User, (Get-Content $pwFile | ConvertTo-SecureString -key (1..16))
Write-Host 'Exporting error log from MyServerName to server path \\MyServer\MySwapFolder\Logs'
$MySession = New-PSSession -computerName MyServerName -credential $cred
invoke-command -Session $MySession -scriptblock {New-item "\\MyServer\MySwapFolder\Logs" -itemtype directory -Force}
invoke-command -Session $MySession -scriptblock {if (test-path "\\MyServer\MySwapFolder\Logs\Errorlog.txt") {remove-item "\\MyServer\MySwapFolder\Logs\Errorlog.txt"}}
invoke-command -Session $MySession -scriptblock {if (test-path "\\MyServer\MySwapFolder\Logs\ErrorlogRaw.txt") {remove-item "\\MyServer\MySwapFolder\Logs\ErrorlogRaw.txt"}}
invoke-command -Session $MySession -scriptblock {get-eventlog -logname system -After (Get-Date).AddDays(-7) | where-object { $_.EntryType -eq "Error" } | format-table -Property Timewritten,Index,Source,InstanceID,Message -Wrap -AutoSize | out-file -filepath "\\MyServer\MySwapFolder\Logs\ErrorlogRaw.txt" -noclobber}
invoke-command -Session $MySession -scriptblock {if (Test-path "\\MyServer\MySwapFolder\Logs\ErrorlogRaw.txt") {(Get-Content "\\MyServer\MySwapFolder\Logs\ErrorlogRaw.txt" | Select-Object -Skip 3) | Set-Content "\\MyServer\MySwapFolder\Logs\Errorlog.txt"}}
Remove-PSSession $MySession