2016-06-02 18 views
1

こんにちは私はPowerShellでDo Until Conditionが真であるがループは停止しないという問題があります。 -eqを0に変更すると停止します。基本的には、テキストファイル内のコンピュータ数を取得する必要があります。その数を$ countに格納します。次に、リスト内の各コンピュータのサービスが最後のものに達するまで再起動します。ループ条件が満たされるまでループする - Powershell

$computers = gc C:\temp\computers.txt 
$count = $computers.count 
Do { 
    foreach($computer in $computers){ 
     $readCount = $computer.ReadCount 
     gwmi win32_service -ComputerName $computer | where {$_.name -like "*was*"} | Restart-Service 
    } 
} 
Until (($count - $readCount) -eq 1) 
+0

。 'ReadCount'プロパティは1から始まるので、' $ readCount'は '$ count'と等しくなりますので、' Until'条件は決して満たされません。 – PetSerAl

答えて

0

ここでは、コンピュータ上で繰り返すことができるので、Do-Untilループは必要ありません。 、最後のコンピュータをスキップ-SkipLast 1パラメータでSelect-Objectコマンドレットを使用するには:あなたはforeach`ループ `内のすべてのコンピュータを反復処理し、` Until`条件は一度だけの繰り返し行わ確認

Get-Content 'C:\temp\computers.txt' | Select-Object -SkipLast 1 | Forach-Object { 
    gwmi win32_service -ComputerName $computer | 
     where {$_.name -like "*was*"} | 
     Restart-Service 
} 
+0

リスト全体を繰り返し処理する必要はありません。最後の残りの1つを除いてすべてのコンピュータが必要です。基本的には、1台のコンピュータでサービスを実行したままにします。 –

+0

ああ、私はその部分を逃した。私は私の答えを編集しました –

+0

ああ素敵な私はそこに - キプロス....があることを認識していませんでした。しかしDo Untilの私の状態が本当であるのにループが続く理由を説明できますか?ちなみに、$ readcountをforeachループの外側に移動し、少なくともループを止めることができました...しかし、-eq 1の場合でもforeachにヒットし、最後のコンピュータでサービスを再起動します。 –

関連する問題