Start-Process-wait не работает, когда скрипт запускается из командной строки, открытой с помощью runas или как запланированная задача

У меня есть сценарий, который я хочу запустить как запланированную задачу, но он не делает то, что должен. Я пытаюсь вызвать исполняемый файл с помощью Start-Process и переключателя-Wait перед продолжением. Линия

Start-Process-FilePath "C:Pfx EngagementAdminUtilitiesBackup RestoreBackupRestoreUtil.exe "- список аргументов " /f "$backup_directory"" -подождать

Если я вызываю его из командной строки, то есть:

в PowerShell . сценарий.ps1

это работает. Он запускает команду и ожидает ее завершения, прежде чем двигаться дальше. Есть еще сценарий, который должен быть запущен после завершения этой команды. Проблема в том, что когда это запланированная задача, она не ждет. Сначала я попытался открыть окно cmd с помощью runas, используя учетную запись запланированной задачи с именем "Скрипты".- Вот я и бегу!--2-->

runas /env / user:Скрипты cmd

открыть команду окно приглашения с учетной записью задачи. Из этой командной строки Я повторяю попытку " powershell. сценарий.ps1 " и на этот раз он не ждет. Он запускает команду и перемещается непосредственно перед завершением команды. Поэтому я подумал, что это может быть проблема с учетной записью "скрипты", пока я не открыл новую командную строку с Администратором runas

runas /env / user:Администратор cmd

когда я вызываю сценарий из этой командной строки администратора, - подождите переключатель также игнорируется, и скрипт перемещается сразу после вызова, не дожидаясь его завершения.

странная часть об этом заключается в том, что когда я вызываю его из командной строки из учетной записи администратора без выполнения runas, он работает. Тот же счет, два разных результата. Любые идеи, что здесь происходит, и что не менее важно, как это исправить?

ОС-это сервер 2008 R2, работающий под управлением powershell 3.0

1 ответов


Не могу сказать, почему он это делает, но я думаю, что это может сработать:

$proc = Start-Process -FilePath "C:\Pfx Engagement\Admin\Utilities\Backup Restore\BackupRestoreUtil.exe" -ArgumentList "/f "$backup_directory"" -Passthru
do {start-sleep -Milliseconds 500}
until ($proc.HasExited)

переключатель-Passthru заставит его вернуть объект процесса для процесса, и вы можете проверить это, чтобы увидеть, когда процесс вышел.