invoke-command无法按预期工作

时间:2013-03-04 10:43:43

标签: powershell invoke-command

我正在尝试使用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

我错过了什么吗?

2 个答案:

答案 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} }
相关问题