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
Antwort
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
}
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. –
Oh, ich habe diesen Teil vermisst. Ich habe meine Antwort bearbeitet –
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. –
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