2011-12-19 202 views
-1

我想在Powershell中啓動服務。如果服務未在指定的時間限制內開始,則應該終止嘗試,否則應該照常進行。我如何結合超時?Powershell超時服務

+2

我用Google搜索「Powershell的超時啓動服務」,第一主打已經爲你一個答案:http://www.powershellcommunity.org/Forums/tabid/54/aft /5243/Default.aspx – JNK 2011-12-19 20:39:36

+0

發佈的代碼無法正常工作,這是我們最初偶然發現該鏈接時的問題,但我們能夠解決該問題。謝謝。 – spassen 2011-12-19 20:56:04

回答

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秒後超時,但它應該讓你開始。基本上是: - 跟蹤的時間 - 開始工作 - 等待它不再運行(它可能已經失敗,所以不要只是等待完成) - 收到成效,而你等待 - 超時,如果你」一直在等待太久

希望這有助於

+0

謝謝,完美的作品。有沒有使用毫秒的方法?當我嘗試使用「0:0:0:50」和「0:0:5」時,它無法正常工作。 – spassen 2011-12-21 20:40:16

+1

是的,你可以在「0:0:0.5」中使用毫秒(你非常接近,而且很挑剔)。您也可以使用[Timespan] :: FromMilliseconds – 2011-12-21 21:31:35

+0

它是v2中的'$ j.State'而不是'$ j.JobState'。 – 2013-02-04 15:31:51