2

このコードを使用して特定のプロセスを見つけるためにinvoke-commandを使用しようとしています

Invoke-Command -ComputerName $selected_server.ServerName -ArgumentList $selected_server.ProcessId -ScriptBlock {Get-Process -Name "winlogon" | where{$_.Id -like $args[0]} }

このコマンドは機能しませんが、それに含まれる数値 $selected_server.ProcessId8900を使用すると、を使用する代わりに$args[0]機能します。

また、このコマンドを実行して、変数が正しく読み取られているかどうかを確認しようとしましたが、そう思われます

Invoke-Command -ComputerName $selected_server.ServerName -ArgumentList $selected_server.ProcessId -ScriptBlock {$args[0]; $args[0].gettype().fullname}

> 8900
> System.Int32

私は何かが足りないのですか?

4

2 に答える 2

3

理由はわかりませんが、これは機能します(多分で$args):foreach-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} }
于 2013-03-04T10:58:44.433 に答える
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} }
于 2013-03-04T13:38:28.463 に答える