2013-03-04 177 views
2

我試圖使用調用命令使用此代碼調用命令不起作用

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 

我缺少的東西?

回答

3

不知道爲什麼,但這個工程(也許$argsforeach-object scriptblockout of scope):

Invoke-Command -ComputerName $selected_server.ServerName ` 
-ArgumentList $selected_server.ProcessId -ScriptBlock ` 
{param ($x) Get-Process -Name "winlogon" | where{$_.Id -like $x} } 
+0

太棒了!有用! – Naigel 2013-03-04 11:07:12

+0

@LorenzoC很高興幫助! – 2013-03-04 11:08:15

2

CB的回答是不錯的&作品的任何地方你可遠程處理(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} }