2012-02-27 11 views
4

を呼び出すときに、私は、リモートマシン上でいくつかの特定のプロセスを強制終了することを意図しています以下の小さなPowerShellスクリプトがあります。しかし、私は次のエラーを取得していますPowerShellの停止・プロセス・ヌルのparam foreachループで

$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} 
} 

を:

Cannot bind argument to parameter 'Id' because it is null.

私の知る限り見ることができるように、パイプラインは何で中断してはいけませんので、私は私が間違っているつもりだところかなりよく分かりません。

答えて

2

:としてそれを試してみてください。したがって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 
+0

感謝。私はあなたの圧縮されたバージョンのスクリプトも本当に好きです。システムを遅くする遠隔呼び出しがはるかに少なくなります(高レイテンシのリンクで実行できます)。 –

2

変数thisIdを引数としてscriptblockに渡す必要があります(Invoke-Commandは、リモートコンピュータに対して実行するときに別の一時セッションでスクリプトブロックを実行するため、ローカル変数はスコープに含まれなくなりました)。スクリプトブロックは$thisIdを取得していないと、それがnullに設定されている

Invoke-Command $destPS {Stop-Process $args} -ArgumentList $thisID 
関連する問題