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