2013-03-07 92 views
0

我不確定是否有更高效的方法可以做到這一點,或者如果組合一段時間,for循環甚至可以工作,但我怎樣才能解決這個問題,只有當for循環中的每個項目都返回時才能運行該函數真正?如何設置do-while(for())循環?

$In = @() 
While ($In[-1] -ne 'done') {$In += @(Read-Host 'Prompt')} 

do { 
    for($i=0;$i-le $In.length-2;$i++) {function($In[$i])} 
    } 
while (for($j=0;$j-le $In.length-2;$j++) 
    {Get-Service ($In[$j]) | $_.status} -eq "Running") 

以$在各種服務名稱的數組,該做的-while應該在服務中的任何一個返回「已停止」狀態重新啓動陣列中的每個服務。

+1

這非常複雜。這應該是做什麼? – 2013-03-07 07:11:49

+0

對不起,我試圖擺脫不必要的信息。 – Forager 2013-03-07 07:28:18

+0

考慮到你的意圖,我會做'a','b','c'| ? {(Get-Service -name $ _)。Status -eq'Stopped'} |重啓Service' – 2013-03-07 07:37:55

回答

0

I'ld做這樣的:

$In = @() 
do 
{ 
$c = (Read-Host 'Enter service name') 
if ($c) { $in+=$c} 
} 
while ($c) #just a void input to end  

$in | where-object {(Get-Service -name $_).Status -match 'Stopped'} | Restart-Service 
0

也許OT,但如果你已經有了V3在該系統上我會做這種方式:

Get-Service | sort Status | Out-GridView -Title 'Select services to restart' -OutputMode Multiple | Restart-Service 
0
while(($ans = Read-Host 'Give me something') -ne 'done'){ 
    Restart-Service $ans 
}