PowerShell [wmiclass] Win32_Process.Create(), затем дождитесь завершения пакетного файла

Я запланировал задание агента SQLserver, которое выполняет сценарий PowerShell, вызывающий запуск пакетного процесса. Однако при выполнении PowerShell он не ждал завершения пакетного файла, прежде чем перейти к следующему шагу задания. Что я могу сделать, чтобы заставить его «ждать» завершения пакетного файла, прежде чем двигаться дальше?

это команда:

  ([WMICLASS]"\\SERVER\ROOT\CIMV2:win32_process").Create("cmd.exe /c E:\BatchFiles\First_Batch_File.bat") 

person BIDevLe    schedule 29.03.2017    source источник
comment
Вы предоставили нам одну рабочую строку из сценария powershell, которая вызывает пакетный файл, из которого мы были исключены, и выполняется как задание агента SQL-сервера, запланированное методом, который также не указан. Позвольте мне предположить, что решение может идти рука об руку с дополнительной соответствующей информацией от вас.   -  person Compo    schedule 29.03.2017


Ответы (1)


Метод Create вернет ProcessId процесса, который он создает. Вы можете проверить, завершился ли этот процесс с помощью Get-Process

$process = ([WMICLASS]"\\SERVER\ROOT\CIMV2:win32_process").Create("cmd.exe /c E:\BatchFiles\First_Batch_File.bat")
while ((Get-Process -Id $process.ProcessId -ErrorAction SilentlyContinue) -ne $null) {
    write-host "waiting"
    sleep 2
}
person BenH    schedule 29.03.2017
comment
Пути с пробелами не будут работать таким образом. Здесь вам нужно добавить экранированные двойные кавычки в $batFilePath: $process = ([WMICLASS]\\$MashineName\ROOT\CIMV2:win32_process).Create(cmd.exe /c "$batFilePath) - person Garric; 30.04.2020
comment
@Garric В пути в вопросе не было пробелов. - person BenH; 01.05.2020