2012-03-16 83 views
3

我开始多个作业(使用Start-Job),并在脚本结尾处检查作业是否运行了超过X秒。然后,我想采取运行和失败的工作,并重新启动他们,直到他们成功。重新提交悬挂作业(开始作业)

作业以我想运行的服务器命名(例如使用Test-Connection)。 我的问题是,我无法弄清楚如何重新提交工作!

get-job | where { $_.state -eq "running" } | remove-job -force | start-job -ScriptBlock { echo $_ } 
  • 我怎样才能管出故障/挂作业(或多个)我开始新工作的名称?
  • 在继续开始工作之前,我如何等待移除工作完成?

亲切的问候:)

回答

3

一种方式重新启动失败的作业:

Start-Job -Name Foo -ScriptBlock { 
    $ErrorActionPreference = 'Stop' 
    Get-Item C:\DoesNotExists 
} | Wait-Job > $null 

Get-Job | ? { $_.State -eq 'Failed' } | % { 
    Start-Job -Name $_.Name -ScriptBlock { iex $args[0] } -ArgumentList $_.Command | Wait-Job | Receive-Job 
} 
+0

啊!我不必担心删除失败的课程作业! IEX是做什么的?我是如何重新提交同名的? – Sune 2012-03-17 00:11:21

+1

@Sune'iex'是'Invoke-Expression'的别名。失败作业的脚本块文本作为字符串传递到新作业。 “Invoke-Expression”正被用于将字符串视为命令。我更新了它以向您展示如何重用该作业名称。 – 2012-03-17 00:20:11

+0

非常感谢你! – Sune 2012-03-17 08:33:25