2011-12-19 4 views
-1

私はPowershellでサービスを開始しようとしています。サービスが指定された制限時間内に開始しない場合、開始しようとする試みは中止されなければなりません。タイムアウトを組み込むにはどうすればよいですか?タイムアウトを実装Powershellタイムアウトサービス

+2

私は、「サービスを開始PowerShellのタイムアウト」をGoogleで検索し、最初のヒットは、あなたのための答えを持っているのに役立ちますが長すぎる

希望を待っていまし/5243/Default.aspx – JNK

+0

投稿されたコードは正常に動作しませんでしたが、当初はそのリンクに遭遇したときの問題でしたが、修正できました。ありがとうございました。 – spassen

答えて

6

は、バックグラウンドジョブを使用して行うには本当に簡単なことです:

$timeout = [Timespan]"0:0:15" 
$start = Get-Date 
$j = Start-Job -ScriptBLock { Import-Module MyModule; Invoke-MyCommand} 
do { 
    if ($j.JobState -ne 'Running') { break} 
    $j | Receive-Job 
} while (((Get-Date) - $start) -le $timeout) 

コードのこのブロックは、15秒後にタイムアウトしますが、それはあなたが始める必要があります。基本的に: - 時刻を追跡する - ジョブを開始する - それがもう実行されないようにする(失敗している可能性があるので、完了するまで待つだけではない) - 待機中に結果を受け取る - http://www.powershellcommunity.org/Forums/tabid/54/aft:これは

+0

ありがとう、完璧に動作します。ミリ秒を使用する方法はありますか?私は "0:0:0:50"と "0:0:.5"を使ってみると正しく動作しませんでした。 – spassen

+1

はい、「0:0:0.5」のミリ秒を使用できます(あなたは本当に近くにいて、それは面倒なことです)。 [Timespan] :: FromMilliseconds –

+0

v2の '$ j.JobState'ではなく' $ j.State'です。 –