4

リモートマシン上の特定のプロセスを強制終了することを目的とした、次の小さなPowerShellスクリプトがあります。

$destPS = "mywebserver1"
$brokerPIDs = Get-Process -ComputerName $destPS | ?{$_.processname -eq "uniRQBroker" -or $_.processname -eq "uniRTE"}
foreach ($process in $brokerPIDs){
    $thisId = $process.ID
    Write-Host "Killing PID $thisId"
    Invoke-Command $destPS {Stop-Process $thisId}
}

ただし、次のエラーが発生します。

nullであるため、引数をパラメーター'Id'にバインドできません。

私が見る限り、パイプラインは何によっても中断されるべきではないので、どこが間違っているのかよくわかりません。

4

2 に答える 2

3

スクリプトブロックはを取得せず$thisId、それはnullに設定されます。したがってstop-process、エラーが発生します。@Rynantが言及しているように、引数をスクリプトブロックに渡すことができます。

Invoke-Command要件に一致するプロセスを取得してプロセスを強制終了するだけなので、コマンドをスクリプトブロックに移動し、リモートボックスを使用してそのスクリプトブロック全体を実行します。

$script = {Get-Process -name uniRQBroker,uniRTE  | stop-process -passthru | %{write-host killed pid $_.id}}

invoke-command -script $script -computer $destPS
于 2012-02-27T21:38:28.480 に答える
2

thisId変数を引数としてscriptblockに渡す必要があります(Invoke-Commandリモートコンピューターに対して実行する場合は、別の一時セッションでscriptblockを実行するため、ローカル変数はスコープ内にありません)。次のように試してください:

Invoke-Command $destPS {Stop-Process $args} -ArgumentList $thisID
于 2012-02-27T21:20:01.563 に答える