Invoke-Command не убивает процесс на удаленной машине - PullRequest
1 голос
/ 16 мая 2019

Перед развертыванием я пытаюсь завершить процессы, которые блокируют файлы, с помощью 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 Ответ

1 голос
/ 16 мая 2019

Как описано выше, создайте объект сеанса 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

Приведенный выше код также вернет вам список процессов, запущенных на удаленном хосте.На основании $remoteProcess вы увидите, запущен ли процесс для уничтожения или нет.Я также установил ErrorActionPreference в stop, что заставляет приведенный выше код останавливаться при первой ошибке (в случае, если сеанс не может быть создан).

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...