Invoke-Command不会终止远程计算机上的进程

时间:2019-05-16 16:31:23

标签: powershell

在部署之前,我试图杀死使用PowerShell Invoke-Command锁定文件的进程

这是我的代码:

$password = ConvertTo-SecureString "password" -AsPlainText -Force

$credentials = New-Object System.Management.Automation.PsCredential("Admin",$password)

$scriptBlock = {Get-Process | Where-Object { $_.MainWindowTitle -like 'MyApp*'} | Stop-Process}

Invoke-Command -computername Agent1 -Credential $credentials -scriptblock $scriptBlock

不幸的是,它什么也不做,也不会抛出任何错误。

在机器上,可以正常工作:

Get-Process | Where-Object { $_.MainWindowTitle -like 'MyApp*'} | Stop-Process

1 个答案:

答案 0 :(得分:1)

如上所述,创建一个PS会话对象:

$ErrorActionPreference = "Stop"

$password = ConvertTo-SecureString "password" -AsPlainText -Force

$credentials = New-Object System.Management.Automation.PsCredential("Admin",$password)

$scriptBlock = {
    $process = Get-Process
    $process | Where-Object { $_.MainWindowTitle -like 'MyApp*'} | Stop-Process}
    $process
}
$session = New-PsSession -ComputerName "Agent1" -Credentials $credentials

$remoteProcess = Invoke-Command -Session $session -Credential $credentials -scriptblock $scriptBlock

$remoteProcess | format-table

以上代码还将为您返回在远程主机上运行的列表进程。根据{{​​1}},您将看到要杀死的进程是否正在运行。我还将$remoteProcess设置为ErrorActionPreference,这会强制上述代码在出现第一个错误时停止(如果无法创建会话)。

希望有帮助