在PowerShell中重新启动已完成的后台作业

时间:2017-03-19 15:35:19

标签: powershell jobs

在PowerShell 5.1中,我使用以下命令

创建了一个后台作业
Start-Job { while($true) { Get-Random; Start-Sleep 5 } } -Name Sleeper

作业创建得很好,它也会以Receive-Job返回结果。我用Stop-Job cmdlet停止了它。

我想在同一个PS会话中重新启动它。

我执行Get-Job cmdlet,我看到那里的工作处于Stopped状态。

如何重新启动它而不重新创建它?

我无法在about_Jobs中获取此信息。

脚本块只是一个示例脚本。我更想知道是否有办法重新启动现有的工作。

1 个答案:

答案 0 :(得分:4)

您无法重新运行已完成的作业。你可以做的一件事就是从已完成的命令中开始一项新工作:

$j1 = Start-Job -ScriptBlock { ... }
...
$j2 = Start-Job -ScriptBlock ([scriptblock]::Create($j1.Command))

如果您需要可以随意重新运行的内容,您可能需要预定的任务或scheduled job

$trigger = New-JobTrigger -Daily -At '2:00 PM'
$options = New-ScheduledJobOption -StartIfOnBattery -StartIfIdle
Register-ScheduledJob -Name 'myjob' -ScriptBlock { ... } -Trigger $trigger -ScheduledJobOption $options

和(重新)调用它,例如像这样:

(Get-ScheduledJob -Name 'myjob').StartJob()
相关问题