2016-06-02 5 views
1

Hallo Ich habe ein Problem in Powershell, wo die Do Until Bedingung erfüllt ist, aber die Schleife nicht zu stoppen. Wenn ich -eq auf 0 setze, wird es aufhören ... Im Grunde sollte man die Anzahl der Computer in der Textdatei ermitteln. Speichern Sie diese Nummer in $ count. Starten Sie dann den Dienst für jeden Computer in der Liste neu, bis der letzte Computer erreicht ist.Do Until Loop-Bedingung erfüllt - aber Schleife wird fortgesetzt - Powershell

+0

Sie iterieren alle Computer innerhalb 'foreach' Schleife und' Until' Zustand checked nur einmal Iteration durchgeführt. Da die 'ReadCount' -Eigenschaft auf einem einzigen Wert basiert, ist '$ readCount' gleich' $ count', so dass Ihre' Until'-Bedingung niemals erfüllt wird. – PetSerAl

Antwort

0

Sie brauchen hier keine Do-Until Schleife, da Sie einfach über die Computer iterieren können. Um den letzten Computer zu überspringen, verwenden Sie das Select-Object Cmdlets mit dem -SkipLast 1 Parameter:

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

Nun, ich möchte nicht, dass es durch die gesamte Liste iteriert, ich will nur alle Computer, aber die letzte verbleibende. Grundsätzlich möchte ich den Dienst auf einem Computer laufen lassen. –

+0

Oh, ich habe diesen Teil vermisst. Ich habe meine Antwort bearbeitet –

+0

Oh schön, ich habe nicht bemerkt, dass es ein -skiplast .... Ok, das funktioniert. Aber können Sie erklären, warum meine Bedingung in der Do Until ist wahr, aber die Schleife geht weiter. Nebenbei bemerkt, habe ich den $ readcount außerhalb der foreach-Schleife bewegt und es erlaubt zumindest, dass die Schleife stoppt ... Jedoch selbst wenn -eq 1, trifft sie immer noch die foreach und startet den Dienst auf dem letzten Computer neu. –