我有以下微小的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”,因为它为null。
据我所见,管道不应该被任何东西打断,所以我不太确定我哪里出错了。
答案 0 :(得分:2)
您需要将变量thisId
作为参数传递给scriptblock(Invoke-Command
在针对远程计算机运行时在单独的临时会话中执行scriptblock,因此局部变量不再在范围内) 。试一试:
Invoke-Command $destPS {Stop-Process $args} -ArgumentList $thisID
答案 1 :(得分:2)
脚本块未获取$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