2016-12-13 8 views
0

У меня есть следующий PowerShell 5 программы:PowerShell не начнет работу

$job = Start-Job -ScriptBlock {timeout.exe 10 /NOBREAK} 
Wait-Job $job 

Когда я бегу, он заканчивается немедленно следующий вывод:

 
Id  Name   PSJobTypeName State   HasMoreData  Location    Command 
--  ----   ------------- -----   -----------  --------    ------- 
1  Job1   BackgroundJob Completed  True   localhost   timeout.exe 10 /NOBREAK 

и timeout.exe не появляется в Диспетчер задач.

Почему это не подождать 10 секунд до прекращения? Когда я вызываю timeout.exe 10 /NOBREAK вне задания, он ждет 10 секунд, как и вызывает Start-Sleep 10 в задании.

Я не ищу другой способ решить ту же проблему (спать), но специально для ответа на вопрос почему эта программа ведет себя так, как она делает.

+0

'Invoke-Command -scriptblock {timeout.exe 10/NOBREAK}' – 4c74356b41

+0

Я имею в виду, 'Start-Job - ScriptBlock {Invoke-Command -ScriptBlock {timeout.exe 10/NOBREAK}} ' – 4c74356b41

+0

вы можете использовать Invoke-Command как задание, чтобы оно выполнялось как фоновое задание, и вы также можете получить его с помощью _Receive-Job_ следующим образом: 'Invoke-Command -ScriptBlock {timeout.exe 10/NOBREAK} -AsJob' –

ответ

1

Проблема заключается в том, что для timeout.exe, чтобы поймать Ctrl + C, он перенаправляет вход, который не работает в фоновом задании. Очевидно, что если все, что вы хотите сделать, это спать, тогда начнется Сон.

Вы можете просмотреть результат вашей работы, и сообщение об ошибке, выполнив:

Receive-Job 1