Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Thomas Deml
In den vorherigen exemplarischen Vorgehensweisen wurde gezeigt, wie Sie IIS-Konfigurationseinstellungen abfragen und ändern. Es gibt jedoch einen unerschlossenen Bereich: die Laufzeitdaten.
Einführung
Die Dinge ändern sich, IIS unterscheidet sich nicht. Websites werden gestartet oder angehalten, Anwendungspools werden recycelt oder laufen ab, Anforderungen gehen ein und Antworten werden gesendet, AppDomains werden gestartet oder heruntergefahren. IIS implementiert eine Schnittstelle namens RSCA (Laufzeitstatus- und Steuerelement-API), mit der Sie überwachen können, was im System passiert.
Das IIS PowerShell-Snap-In verwendet diese Schnittstelle und macht einige seiner Daten über den IIS-Snap-In-Namespace verfügbar. Der Status von Websites und Anwendungspools kann über die Cmdlets "Get-WebItemState", "Start-WebItem", "Stop-WebItem" und "Restart-WebItem" konfiguriert werden. Laufzeitstatus wie derzeit ausgeführte Arbeitsprozesse, derzeit ausgeführte Anforderungen und geladene AppDomains werden über den IIS-Namespace verfügbar gemacht.
In dieser exemplarischen Vorgehensweise werden die Websites, Anwendungen und virtuellen Verzeichnisse verwendet, die in einer vorherigen exemplarischen Vorgehensweise erstellt wurden.
Standort- und Anwendungspoolstatus
Wir beginnen mit der Abfrage des Status unserer Websites.
Seitenstatus
PS IIS:\> cd Sites
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Started
Das Beenden von DemoSite kann mit dem Cmdlet Stop-WebItem erreicht werden:
PS IIS:\Sites> Stop-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Stopped
Der Start funktioniert natürlich auf die gleiche Weise:
PS IIS:\Sites> Start-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\sites\DemoSite
Started
AppPool-Status
Wir möchten dasselbe für Anwendungspools tun
PS IIS:\> cd AppPools
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Started
PS IIS:\AppPools> Stop-WebItem DemoAppPool
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Stopped
Es gibt aber auch die Zustandseigenschaft, die Sie im AppPools-Knoten lesen können. Lassen Sie uns etwas Spaß mit dem nächsten Beispiel haben. Schalten Sie Die Lautsprecher ein, und führen Sie den folgenden Befehl aus:
dir 'iis:\AppPools' | foreach {[void](new-object -com Sapi.SPVoice).Speak("Application Pool State:");}{$poolState = "Application Pool " + $_.Name +" is " + $_.State;$poolState;[void](new-object -com Sapi.SPVoice).Speak($poolState);}
Starten Sie Jetzt DemoAppPool erneut:
PS IIS:\AppPools> Start-WebItem DemoAppPool
Wiederverwendung von App-Pools
Der einzige Unterschied bei AppPools besteht darin, dass sie wiederverwendet werden können. Das Cmdlet zum Recyceln von AppPools wird Restart-WebItem und nicht als Recycle-WebItem bezeichnet. PowerShell verfügt über ziemlich strenge Benennungsregeln, und wir mussten uns für Restart-WebItem entscheiden. Lassen Sie uns dieses Beispiel ein wenig erweitern.
- Eine Anforderung an die Standardseite der 'Default Web Site' stellen.
- Die Abfrage der PID des Arbeitsprozesses besteht darin, dass die Anforderung verarbeitet wird.
- Recycling des Anwendungspools.
- Erneutes Anfordern der PID, um zu bestätigen, dass der Prozess neu gestartet wurde.
1. Anfordern der Standardseite
Wir verwenden die Net.WebClient-Klasse zum Anfordern http://localhost/. Anstatt die Ausgabe auf dem Bildschirm anzuzeigen, betrachten wir nur die Länge der Antwort.
PS IIS:\AppPools> $response = (new-object Net.WebClient).DownloadString("http://localhost/")
PS IIS:\AppPools> $response.Length
689
2. Abfragen der PID des Arbeitsprozesses
Wenn Sie keine anderen aktiven Websites und Anwendungen auf Ihrem Computer haben, sollte der folgende Befehl nur eine PID zurückgeben:
PS IIS:\AppPools> get-process w3wp | select processname,id
ProcessName Id
----------- --
w3wp 3684
Es gibt eine bessere Möglichkeit, zu Arbeitsprozessen zu gelangen, die in dieser exemplarischen Vorgehensweise etwas später behandelt werden.
3. Recycling des Anwendungspools
Wir recyceln den Anwendungspool mithilfe des Cmdlets Restart-WebItem:
PS IIS:\AppPools> Restart-WebItem DefaultAppPool
4. Abfragen der PID des Arbeitsprozesses
Wenn der AppPool erfolgreich wiederverwendet wurde, sollte Ihre Prozess-ID geändert worden sein.
PS IIS:\AppPools> get-process w3wp | select processname,id
ProcessName Id
----------- --
w3wp 5860
Arbeitsprozesse und Anforderungen
Das Cmdlet "get-process" hilft Ihnen nicht, herauszufinden, welcher Anwendungspool ein bestimmter Arbeitsprozess bedient. Dies kann jedoch problemlos erfolgen:
PS IIS:\AppPools> dir DefaultAppPool\WorkerProcesses
processId Handles state StartTime
--------- ------- ----- ---------
6612 326 1 3/28/2008 12:20:27 PM
Derzeit ausgeführte Anforderungen
Wenn es sich bei Ihrer Maschine nicht um eine Produktionsmaschine handelt, wird es Ihnen schwerfallen, sich die derzeit ausgeführten Anfragen anzusehen. Die Anfrage ist längst abgelaufen, bis Sie eine neue über den Internet Explorer senden und wieder in die PowerShell-Konsole zurückkehren. Hier ist ein kleiner Helfer. Es handelt sich um eine Anfrage, die lange dauert.
Set-Content "$env:systemdrive\inetpub\wwwroot\long.aspx" "<%@ Page language=`"C#`"%><%System.Threading.Thread.Sleep(30000);Response.Write(`"slept for 30 seconds`");%>"
Wenn Sie sich die aktuell ausgeführten Anforderungen ansehen möchten, können Sie den folgenden Befehl eingeben (HINWEIS: Die Prozess-ID, die Sie für den Befehl "get-item" verwenden müssen, unterscheidet sich auf Ihrem Computer):
PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> dir
Process State Handles Start Time
Id
-------- ----- ------- ----------
6612 Running 737 3/31/2008 8:18:15 AM
PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0).Collection
requestId : d8000001800000f5
connectionId : d8000001600000f3
verb : GET
url : /long.aspx
siteId : 1
Oder wenn Sie sehen möchten, wie viel Zeit seit dem Starten der Anforderung bereits vergangen ist:
PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0).Collection | select url,timeElapsed
url timeElapsed
--- -----------
/long.aspx 2637
Zusammenfassung
Fertig. In dieser exemplarischen Vorgehensweise haben Sie erfahren, wie Sie den Status von IIS-Anwendungspools und -Websites abfragen. Sie haben herausgefunden, wie Sie sie starten und beenden. Außerdem haben Sie gelernt, wie Sie Arbeitsprozesse und derzeit ausgeführte Anforderungen betrachten.