使用GetEventLog CmdLet时出现错误的PowerShell

时间:2012-04-13 19:36:00

标签: powershell cmdlet

我正在尝试运行PowerShell脚本并尝试按消息过滤。

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

我正在尝试使用以下参数运行脚本:

GetEventLog.ps1 "SERVERNAME" "TEXT_TO_FIND"
  

无法验证参数'Message'的参数。参数为null或空。提供非null或的参数   为空,然后再次尝试该命令。       + CategoryInfo:InvalidData:(:) [Get-EventLog],ParameterBindingValidationException       + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetEventLogCommand

由于某种原因,它处理$ server参数很好,但是如果抱怨$ message变量。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

您可以在没有Invoke-Command的情况下获取事件:

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

如果命令生成错误,您将无法捕获它,因为它可能不会是终止错误。要使错误终止,请使用ErrorAction参数:

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

答案 1 :(得分:1)

尝试这种方式:

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

答案 2 :(得分:0)

您需要使用-ArgumentList参数传递$ message作为参数。查看手册页的示例9:

Invoke-Command

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