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

Restart a completed background job in PowerShell

在 PowerShell 5.1 中,我使用以下命令创建了一个后台作业

Start-Job { while($true) { Get-Random; Start-Sleep 5 } } -Name Sleeper

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

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

我执行 Get-Job cmdlet,我看到那里的作业处于停止状态。

如何在不重新创建的情况下重新启动它?

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

脚本块只是一个示例脚本。我更想知道是否有办法重新启动已经存在的作业。

您不能重新运行 已完成的作业。您可以做的一件事是从已完成的工作的命令开始一项新工作:

$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()