2012-03-16 9 views
3

私はいくつかのジョブを開始しています(Start-Jobで)。スクリプトの最後に、ジョブがX秒以上実行されているかどうかを確認します。私は、実行中のジョブと失敗したジョブを取り出し、成功するまで再起動したいと考えています。ハングアップジョブを再サブミットする(開始ジョブ)

ジョブの名前は、実行したいサーバーの名前になります(Test-Connectionなど)。 私の問題は、私が仕事を再提出する方法を理解できないということです!

get-job | where { $_.state -eq "running" } | remove-job -force | start-job -ScriptBlock { echo $_ } 
  • どのようにすることができますIパイプ私は始めています新しい仕事に失敗した/絞首刑仕事(複数可)の名前?
  • Start-Jobを続行する前に、削除ジョブが完了するのを待つ方法を教えてください。

種類はみなし:)失敗したジョブを再起動する

答えて

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

+1

@Sune 'iex'は' Invoke-Expression'のエイリアスです。失敗したジョブのスクリプトブロックテキストは、新しいジョブに文字列として渡されます。 'Invoke-Expression'は文字列をコマンドとして扱うために使われています。私はそれを更新して、ジョブ名を再利用する方法を示しました。 –

+0

ありがとうございました! – Sune

関連する問題