将参数作为参数传递给 -filterXPath get-wineventLogs

将参数作为参数传递给 -filterXPath get-wineventLogs

你好,我编写了 powershell 脚本,其中我采用了三个参数(在 param 块中)并将它们作为参数传递给 -FilterXPath。但我无法获得结果。

$eventID=7036
$ServiceName=PW
$Status=已停止

如果我输入值而不是变量,它会给出正确的结果。

请帮忙。非常紧急。

param($eventID,$ServiceName,$Status)

$eventID | add-content "path\hello.txt"
$ServiceName | add-content "path\hello.txt"
$Status | add-content "path\hello.txt"

sleep 5
$ErrorTime=Get-WinEvent -LogName 'System' -FilterXPath 'Event[System[EventID=$(eventID)] and EventData[Data[@Name="param1"]="$(ServiceName)" and Data[@Name="param2"]="$(Status)" ]]' -MaxEvents 1 | select -expand timecreated
$ErrorTime | add-content "path\hello.txt"

答案1

单引号内的内容是文字,变量不展开。对包含变量并需要展开的内容使用双引号。将过滤器外部的单引号替换为双引号。对包含变量的部分使用转义双引号(反引号双引号)。对于非变量的参数,您可以在内部使用单引号。

附注 C:> 帮助 about_quoting_rules

PS C:\> $var = "quick brown fox"
PS C:\> write-host "$var"
quick brown fox
PS C:\> write-host '$var'
$var
PS C:\> write-host "`"$var`""
"quick brown fox"

相关内容