Доступ запрещен при ожидании процесса, запущенного с учетными данными - PullRequest
0 голосов
/ 04 мая 2018

У меня есть скрипт, который запускается в пользовательском контексте пользователя, у которого нет разрешения на установку приложений. Мне нужно установить exe, поэтому мне нужно сделать это как администратор домена.

После установки я хотел бы выполнить другие действия в сценарии, но установка должна быть завершена, прежде чем продолжить работу со сценарием.

Когда я Wait-Process для завершения установки, я получаю ошибку отказа в доступе.

Есть ли способ дождаться завершения процесса, который был запущен в другом пользовательском контексте?

Это мой код:

$P = Start-Process $Pfad\vcredist_x64.exe -Argumentlist "/install","/passive","/norestart" `
                         -WorkingDirectory $Pfad -Credential $cred -PassThru | Wait-Process

Это сообщения об ошибках (перевод с немецкого):

Доступ запрещен

Процесс ожидания: эта команда завершила операцию «vcredist_x64 (6284)» из-за следующей ошибки: Доступ запрещен. В Зейле: 6 Zeichen: 84 + ... -WorkingDirectory $ Pfad -Credential $ cred -PassThru | Wait-процесс + ~~~~~~~~~~~~ + CategoryInfo: CloseError: (System.Diagnost ... (vcredist_x64): Process) [Wait-Process], ProcessCommandException + FullyQualifiedErrorId: ProcessNotTeridity, Microsoft.PowerShell.Commands.WaitProcessCommand

Время ожидания

Wait-Process: эта команда завершила процесс, поскольку процесс "vcredist_x64 (6284)" не был завершен в течение указанного времени ожидания. В Цайле: 6 Цейхен: 84 + ... -WorkingDirectory $ Pfad -Credential $ cred -PassThru | Wait-процесс + ~~~~~~~~~~~~ + CategoryInfo: CloseError: (System.Diagnost ... (vcredist_x64): Process) [Wait-Process], TimeoutException + FullyQualifiedErrorId: ProcessNotTeridity, Microsoft.PowerShell.Commands.WaitProcessCommand

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Размещение моего предыдущего комментария в качестве ответа

$proc = Start-Process "Notepad.exe" -PassThru
$proc.WaitForExit()
$proc1 = Start-Process "Calc.exe" -PassThru
$proc1.WaitForExit()
0 голосов
/ 04 мая 2018

Я сделал что-то подобное на днях. Мой случай был немного другим. Я что-то начинал, я хотел, чтобы что-то произошло, когда этот процесс закончился, а пока я занимался чем-то другим. Для этого я использовал событие. Вот пример использования Блокнота:

$do_other_stuff = { 
    Write-Host 'Do Other Stuff'
    Get-EventSubscriber | Unregister-Event
}

$p = Start-Process notepad.exe -PassThru
...do other stuff...

$job = Register-ObjectEvent -InputObject $p `
    -EventName Exited `
    -SourceIdentifier notepad `
    -Action $do_other_stuff

Если бы я хотел подождать, пока сработает четность, я бы использовал Wait-Event. По окончании работы установщика в блоке сценария $do_other_stuff все, что вы хотите сделать.

На ваш вопрос у меня сработало следующее:

$p = Start-Process notepad.exe -PassThru -Wait
...do stuff...

Как и ...

$p = Start-Process notepad.exe -PassThru
$p.WaitForExit()
...do stuff...

Эти случаи работали при запуске скрипта в контексте с повышенными и повышенными правами. Он работал при передаче учетных данных в Start-Process через параметр -Credential. Я не смог попробовать, где учетная запись, вызывающая Start-Process, является учетной записью с низким уровнем привилегий; У меня встреча в нескольких, извините.

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