【问题标题】:PowerShell won't start jobPowerShell 不会开始工作
【发布时间】: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


【解决方案1】:

这里的问题是 timeout.exe 要捕获 Ctrl+C,它会重定向输入,这在后台作业中不起作用。显然,如果你只想睡觉,那么 Start-Sleep 就可以了。

您可以通过以下操作查看作业的输出和错误消息:

Receive-Job 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2010-11-23
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多