2012-03-16 2 views
3

Я запускаю несколько заданий (с помощью Start-Job), и в конце моего сценария я делаю чек, чтобы проверить, было ли задание более X секунд. Затем я хотел бы выполнить задания Running and Failed и перезапустить их, пока они не добьются успеха.Resubmit hanging job (start-job)

Задачи названы в честь сервера, с которым я бы хотел работать (например, с помощью 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

Ahh! Мне не нужно беспокоиться об удалении неудачных заданий! Что делает IEX? Это то, как я повторно передаю одноименное имя? – Sune

+1

@Sune 'iex' является псевдонимом для' Invoke-Expression'. Текст сценария неудачного задания передается новому заданию в виде строки. 'Invoke-Expression' используется для обработки строки как команды. Я обновил его, чтобы показать вам, как вы можете повторно использовать имя задания. –

+0

Спасибо вам большое! – Sune