2016-09-22 6 views
0

Я пытаюсь использовать powershell Timer для выполнения некоторой периодической работы, и как только работа вернет результаты, которые соответствуют моим ожиданиям, я прекращу выполнение задания.таймер powershell не может сразу остановиться

>$timer = New-Object System.Timers.Timer 
>$counter = 0 
>$timer.Interval = 1000 
>$timer.AutoReset = $true 
>Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action { if ($counter -eq 5) {$timer.Stop(); } ; $counter = $counter +1; write-host "counter is: " $counter; } 
>$timer.Start() 

Результат:

counter is: 1 
counter is: 2 
counter is: 3 
counter is: 4 
counter is: 5 
counter is: 6 

Я ожидал, что таймер, чтобы остановить один раз $ счетчик достигает 5, но он продолжает работать. Есть ли способ до сразу остановить таймер, когда какое-то условие будет удовлетворено?

ответ

0

Ваш IF должен иметь ELSE. Ваша логика неверна. Попробуйте такой код:

$timer = New-Object System.Timers.Timer 
$counter = 0 
$timer.Interval = 1000 
$timer.AutoReset = $true 
$wait = $true 
Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action { if ($counter -eq 5) {$timer.Stop(); write-host "counter stopped"; $global:wait=$false } else {$counter = $counter +1; write-host "counter is: " $counter; }} 
$timer.Start() 

while ($wait) { "sleeping..."; Start-Sleep -Milliseconds 500 } 
$timer.Close() 
"exiting..." 

Выход

На моей машине это отображает:

Id  Name   PSJobTypeName State   HasMoreData  Location    Command     
--  ----   ------------- -----   -----------  --------    -------     
13  3a8d73a2-589...     NotStarted False         if ($counter -eq 5)... 
sleeping... 
sleeping... 
counter is: 1 
sleeping... 
sleeping... 
counter is: 2 
sleeping... 
sleeping... 
counter is: 3 
sleeping... 
sleeping... 
counter is: 4 
sleeping... 
sleeping... 
counter is: 5 
sleeping... 
sleeping... 
counter stopped 
sleeping... 
exiting... 
+0

$ ждать всегда верно. поэтому «спать ...» всегда печатается. – derek

+0

работает для меня, поэтому не уверен, как еще вам помочь здесь. продолжайте отлаживать свой код, я думаю. -kory –

+0

моя версия 5.1 – derek

Смежные вопросы