2012-04-13 9 views
0

Ich versuche ein Powershell-Skript auszuführen und versuche, nach der Nachricht zu filtern.Powershell-Fehler bei Verwendung von GetEventLog CmdLet

param($server,$message) 
Try 
{ 
Invoke-Command -computername $server {Get-Eventlog -logname application -source "source" -message $message | Format-List} 
} 
Catch [Exception] 
{ 
Write-Host $_.Exception.ToString() 
} 

Der Versuch, das Skript mit den folgenden Parametern

GetEventLog.ps1 "Servername" "TEXT_TO_FIND"

Kann nicht bestätigen Argument auf Parameter 'Message' auszuführen. Das Argument ist null oder leer. Geben Sie ein Argument ein, das nicht Null oder ist, und leeren Sie den Befehl erneut. + CategoryInfo: invalidData: (:) [Get-EventLog], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationError, Microsoft.PowerShell.Commands.GetEventLogCommand

Aus irgendeinem Grund den feinen $ Server-Parameter behandelt, aber wenn beschwert sich über die $ message Variable.

Irgendwelche Hinweise?

+0

Get-EventLog ist so langsam !!. Ich beendete damit. Get-WinEvent-Computername $ Server -FilterHashTable @ {LogName = 'Anwendung'; Providername = $ Provider} | Where-Objekt {$ _. Nachricht -match $ Nachricht -And $ _. TimeCreated -ge $ nach -und $ _. TimeCreated -le $ vor} – Maverick

Antwort

0

Sie müssen $ Nachricht als Argument mit dem Parameter -ArgumentList übergeben. Check out Beispiel 9 der Manpage:

http://technet.microsoft.com/en-us/library/dd347578.aspx

invoke-command -computername server01 -scriptblock {param($log, $num) get-eventlog -logname $log -newest $num} -ArgumentList $MWFO_Log, 10 
+0

Versuchen Sie es, aber definitiv nicht so klar und einfach wie Shay Levy beantworten. Warum muss ich den Skriptblock verwenden? Ich denke, wenn ich den Invoke-Befehl nicht verwende, würde ich diesen Ansatz nicht brauchen. :) – Maverick

+0

@Maverick Ja, es passiert einfach, dass das Get-EventLog-Cmdlet Remote-Ausführung bereits unterstützt, so dass Sie Invoke-Command nicht verwenden müssen. –

1

versuchen auf diese Weise:

Invoke-Command -computername $server {Get-Eventlog -logname application -source "source" -message $args[0] | Format-List} -ArgumentList $message 
+0

Das hat nicht funktioniert – Maverick

+0

haben Sie den gleichen Fehler? –

+0

Dies ist nicht die richtige Lösung wie @ShayLevy, aber es löst den Fehler, den Sie gepostet haben. –

3

Warum mit Invoke-Command, wenn Sie die Ereignisse, ohne es zu bekommen?

Get-EventLog -ComputerName $server -LogName application -source "source" -message $message 

Falls der Befehl einen Fehler erzeugt Sie nicht in der Lage sein, es zu fangen, da es wahrscheinlich nicht ein Abschlussfehler sein. Um den Fehler zu beenden, verwenden Sie den ErrorAction-Parameter:

Get-EventLog -ComputerName $server -LogName application -ErrorAction Stop ... 
+0

Guter Anruf Shay! –

+0

Danke @AndyArismendi :) –

+0

Das hat wirklich funktioniert !! – Maverick

Verwandte Themen