【发布时间】:2016-12-13 13:56:31
【问题描述】:
我有以下 PowerShell 5 程序:
$job = Start-Job -ScriptBlock {timeout.exe 10 /NOBREAK}
Wait-Job $job
当我运行它时,它会立即终止并显示以下输出:
Id 名称 PSJobTypeName 状态 HasMoreData 位置命令 -- ---- ------------- ----- ------------ -------- -------- 1 Job1 BackgroundJob Completed True localhost timeout.exe 10 /NOBREAK并且timeout.exe 不会出现在任务管理器中。
为什么在终止前不等待 10 秒?当我在作业外调用 timeout.exe 10 /NOBREAK 时,它会等待 10 秒,就像在作业中调用 Start-Sleep 10 一样。
我不是在寻找解决同一问题(睡眠)的不同方法,而是专门为为什么这个程序的行为方式的答案。
【问题讨论】:
-
Invoke-Command -ScriptBlock {timeout.exe 10 /NOBREAK} -
我的意思是,
Start-Job -ScriptBlock {Invoke-Command -ScriptBlock {timeout.exe 10 /NOBREAK}} -
您可以使用 Invoke-Command 作为作业,因此它将作为后台作业运行,您也可以使用 Receive-Job 接收它,如下所示:
Invoke-Command -ScriptBlock {timeout.exe 10 /NOBREAK} -AsJob
标签: windows powershell powershell-5.0 job-control