在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中获取此信息。
脚本块只是一个示例脚本。我更想知道是否有办法重新启动现有的工作。
答案 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()