我正在尝试使用invoke-command来查找使用此代码的特定进程
Invoke-Command -ComputerName $selected_server.ServerName -ArgumentList $selected_server.ProcessId -ScriptBlock {Get-Process -Name "winlogon" | where{$_.Id -like $args[0]} }
此命令不起作用,但如果我使用中包含的数值
$selected_server.ProcessId
是8900,而不是使用$args[0]
,它可以正常工作。
我还尝试执行此命令来验证是否正确读取了变量,看起来似乎是
Invoke-Command -ComputerName $selected_server.ServerName -ArgumentList $selected_server.ProcessId -ScriptBlock {$args[0]; $args[0].gettype().fullname}
> 8900
> System.Int32
我错过了什么吗?
答案 0 :(得分:3)
不知道为什么但这有效($args
中的foreach-object scriptblock
可能是out of scope
):
Invoke-Command -ComputerName $selected_server.ServerName `
-ArgumentList $selected_server.ProcessId -ScriptBlock `
{param ($x) Get-Process -Name "winlogon" | where{$_.Id -like $x} }
答案 1 :(得分:2)
C.B的回答是好的&适用于远程可用的任何地方(v2.0和更高版本),但如果您使用PowerShell 3.0 - Using
范围修饰符,还有另一种(更简单)的方法。见about_Remote_Variables
Invoke-Command -ComputerName $selected_server.ServerName -ArgumentList $selected_server.ProcessId -ScriptBlock {Get-Process -Name "winlogon" | where{$_.Id -like $Using:selected_server.ProcessId} }