Ich bin verwirrt, wie -Passthru
funktioniert.Verwenden Sie passthru, um sicherzustellen, dass das Cmdlet fertig ist
Aus meiner Sicht wird der Parameter -Passthru
verwendet, um das Ergebnis eines Cmdlets an die Pipeline zu übergeben, selbst wenn das Cmdlet selbst keine Ergebnisse liefert.
Ich hat versucht, diesen Code zu schreiben, zuerst: (Ich versuche, den IIS-Applikations-Pool ohne Restart-WebAppPool
Cmdlets zu recyceln)
Stop-WebAppPool -Name Foo
Start-WebAppPool -Name Foo
Wie ich erwartet habe, es braucht Zeit, um eine IIS Application zu stoppen, und da PowerShell wartet nicht, bis Cmdlets ihren Job beendet haben. Die Anwendung Stop-WebAppPool
stoppt den Anwendungspool und kehrt zurück. Da der Anwendungspool nicht bereit für den Start ist, wird Start-WebAppPool
aufgerufen und Fehler wird ausgelöst.
Also änderte ich meinen Code in diese:
Stop-WebAppPool -Name Foo
Start-Sleep -Seconds SomeValueNeedToGetMeasuredAndChanged
Start-WebAppPool -Name Foo
Es funktioniert aber nicht sehr elegent und flexibel.
Dann füge ich -Passthru
auf beide der Cmdlets, wird es:
Stop-WebAppPool -Name Foo -Passthru
Start-WebAppPool -Name Foo -Passthru
Alles geht in Ordnung und kein Fehler ausgelöst wird.
In meinem Fall, ich nehme an:
Der Stop/Start-WebAppPool Cmdlets keine Ergebnisse produziert, bis wirklich der Anwendungspool angehalten werden/gestartet. Da -Passthru
etwas zum Übergeben an die Pipeline benötigt, wartet PowerShell, bis das Cmdlet das Ergebnis erzeugt. In diesem Fall wird der Anwendungspool gestoppt/gestartet, um den nächsten auszuführen.
Ich kann keine nützlichen Handbücher entweder -Passthru
oder Stop-WebAppPool
finden, also ist es in diesem Fall in Ordnung?
Vielen Dank für Ihre Erklärung! Ich habe '-PassThru' entfernt und die oben angegebenen Codes verwendet! Klappt wunderbar! – WonTasia