Как заставить powershell ждать командный файл для завершения выполнения всех команд на удаленном сервере - PullRequest
1 голос
/ 30 апреля 2020
$storesess = New-PSSession -ComputerName marshy -Credential marshy001
Enter-PSSession -Session $storesess
Invoke-Command -ScriptBlock {start-process C:\Users\marshmellow\Documents\Some\xyz.bat }
Exit-PSSession

Выше приведен скрипт, который вызывает файл bat, сохраненный на удаленном сервере C: \ Users \ marshmellow \ Documents \ Some \ xyz.bat

Файл bat содержит две команды, одна из которых устанавливает рабочий каталог, использующий «pushd» и другой, который останавливает процесс приложения. Вторая команда занимает пару минут. Я обнаружил, что Start-Process не ожидает успешного завершения второй команды, он просто запускает команду и закрывает процесс.

Есть ли способ заставить Start-Process ожидать успешного завершения команды, поскольку я уже пытался использовать -Wait, который не работает.

Если есть способ даже открыть сеанс cmd на удаленном сервере и передать несколько команд, сохраненных в переменных, и этот вывод передается моему сценарию PowerShell, даже если это нормально. Может кто-нибудь, пожалуйста, помогите?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Вам не нужен командлет Invoke-Command. Просто используйте Start-Process с параметром -Wait и передайте правильные параметры в cmd:

$storesess = New-PSSession -ComputerName marshy -Credential marshy001
Enter-PSSession -Session $storesess
Start-Process cmd -ArgumentList "/C C:\Users\marshmellow\Documents\Some\xyz.bat" -Wait
Exit-PSSession
0 голосов
/ 30 апреля 2020

Использование cmd.exe может работать?

Invoke-Command -ScriptBlock {
    cmd /k  "C:\Users\marshmellow\Documents\Some\xyz.bat"
} -ErrorAction Stop

Если нет, возможно, вы могли бы Start-Process -Wait на cmd.exe, а затем предоставить пакетные команды как -ArgumentList

Что вы получите, если попробуете это?

Invoke-Command -FilePath $PathToBatchFile
...