2011-12-19 126 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