Get-WinEvent zwraca puste messages

12-Maj-2014

Na komputerze z polskim windows, jest uruchamiana komenda

Get-WinEvent -LogName System -ComputerName Comp001 -Credential $cred   | where {$_.Id -eq 9052}

Niestety w zwracanym wyniku właściwość Message jest pusta! To samo polecenie uruchomione lokalnie na tym komputerze działa poprawnie. Okazało się że jest to bug obecny w Powershell 3.0 i 4.0 (http://connectppe.microsoft.com/PowerShell/feedback/details/716533/get-winevent-does-not-return-the-content-of-the-event-message-in-v3-ctp2)

Jest za to obejście problemy, który wynika z różnych ustawień kultury na komputerze zdalnym i lokalnym.

Function Using-Culture (
[System.Globalization.CultureInfo]$culture = (throw „USAGE: Using-Culture -Culture culture -Script {scriptblock}”),
[ScriptBlock]$script= (throw „USAGE: Using-Culture -Culture culture -Script {scriptblock}”))
{
$OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
trap
{
[System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
}
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
Invoke-Command $script
[System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
}

Funkcja zmienia ustawienia kultury na wskazane i potem wywołuje wskazany skrypt. Moje polecenie można więc wywołać tak:

Using-Culture -Culture ‚en-US’ -Script { Get-WinEvent -LogName System -ComputerName Comp001 -Credential $cred   | where {$_.Id -eq 9052} }

I to działa….

Dodaj komentarz:

Autor: Rafał Kraik