2016-12-13 3 views
0

je le programme PowerShell 5 suivant:PowerShell ne démarre pas l'emploi

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

Quand je le lance, il se termine immédiatement à la sortie suivante:

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

et timeout.exe ne semble pas Gestionnaire des tâches. Pourquoi ne pas attendre 10 secondes avant de terminer?

Lorsque j'appelle timeout.exe 10 /NOBREAK en dehors d'un travail, il attend 10 secondes, tout comme l'appel de Start-Sleep 10 dans un travail.

Je ne cherche pas une façon différente de résoudre le même problème (sommeil), mais spécifiquement pour une réponse à pourquoi ce programme se comporte comme il le fait.

+0

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

+0

Je veux dire, 'Start-Job - ScriptBlock {Invoke-Command -ScriptBlock {timeout.exe 10/NOBREAK}} ' – 4c74356b41

+0

vous pouvez utiliser Invoke-Command comme travail afin qu'il s'exécute en tant que tâche en arrière-plan et vous pouvez également le recevoir en utilisant _Receive-Job_ comme ceci: 'Invoke-Command -ScriptBlock {timeout.exe 10/NOBREAK} -AsJob' –

Répondre

1

Le problème ici est que pour timeout.exe pour attraper un Ctrl + C, il redirige l'entrée, qui ne fonctionne pas dans un travail en arrière-plan. Évidemment, si tout ce que vous voulez faire est de dormir, Start-Sleep fonctionnera.

Vous pouvez voir la sortie de votre travail, et le message d'erreur en faisant:

Receive-Job 1