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

但是,我收到以下错误:

无法将参数绑定到参数“Id”,因为它为空。

据我所知,管道不应该被任何东西打断,所以我不太确定我哪里出错了。

4

2 回答 2

3

脚本块没有得到$thisId并且设置为空。所以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作为参数传递给脚本块(Invoke-Command在针对远程计算机运行时在单独的临时会话中执行脚本块,因此局部变量不再在范围内)。试试看:

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