Freigeben über


PowerShell-Snap-In: Laufzeitdaten

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.

  1. Eine Anforderung an die Standardseite der 'Default Web Site' stellen.
  2. Die Abfrage der PID des Arbeitsprozesses besteht darin, dass die Anforderung verarbeitet wird.
  3. Recycling des Anwendungspools.
  4. 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.