Freigeben über


PowerShell-Snap-In: Verwenden der aufgabenbasierten Cmdlets des IIS PowerShell-Snap-In

von Thomas Deml

Einführung

IIS PowerShell-Snap-In-Cmdlets können in drei Kategorien unterteilt werden:

  • Für die Anbieterhierarchie erforderliche Cmdlets
  • Cmdlets zur Konfiguration auf niedriger Ebene
  • Aufgabenbasierte Cmdlets

In dieser exemplarischen Vorgehensweise wird das aufgabenbasierte IIS-Cmdlet vorgestellt, und es werden einige Beispiele für die Verwendung erläutert.

Für die Anbieterhierarchie erforderliche Cmdlets

IIS hat schon früh beschlossen, die IIS-Konfiguration als Hierarchie von Sites, Anwendungen, virtuellen Verzeichnissen und Anwendungspools verfügbar zu machen. Der Vorteil besteht darin, dass Kunden zu einem Ort, z. B. einer Site oder Anwendung, in der Hierarchie navigieren und Einstellungen in diesem Kontext festlegen können. Um eine Navigationshierarchie zu unterstützen, müssen bestimmte vordefinierte PowerShell-Cmdlets wie „New-Item“, „Set-ItemProperty“ usw. implementiert werden. Die Hierarchie und diese integrierten Cmdlets wurden im April 2008 in der Tech Preview 1 bereitgestellt.

Cmdlets zur Konfiguration auf niedriger Ebene

Das IIS-Konfigurationssystem wurde in Version 7 vollständig überarbeitet. Das neue Konfigurationssystem ist vollständig XML-basiert, schemabasiert und komplett erweiterbar. Der neue IIS-FTP-Server (FTP7) und viele andere IIS-Module wie URL-Rewriter, WebDAV usw. nutzen diese Erweiterbarkeit, um sich mit dem IIS-Konfigurationssystem zu verbinden.

Diese Erweiterbarkeit macht es schwierig, Cmdlets mit statischen Argumenten bereitzustellen. Stellen Sie sich den Fall vor, dass jemand einen vorhandenen Konfigurationsabschnitt erweitert, und beispielsweise eine myFancyNewBehavior-Eigenschaft zum „virtualDirectory“-Konfigurationsabschnitt hinzufügt. Ohne Überarbeitung der IIS-Cmdlets könnte die „fancyNewBehavior“-Einstellung nicht über die PowerShell-Snap-In-Cmdlets festgelegt werden.

Technical Preview 1 des IIS PowerShell-Snap-In hat nur Cmdlets auf niedriger Ebene enthalten, die die gesamte Konfigurationserweiterbarkeit berücksichtigt haben. Jede IIS-Konfigurationseinstellung (über 100 Konfigurationsabschnitte mit Sammlungen, Enumerationen usw.) kann mit diesen Cmdlets konfiguriert werden. Diese Cmdlets auf niedriger Ebene funktionieren auch mit der benutzerdefinierten Konfiguration, z. B. wenn Sie die IIS-Konfiguration mit Ihrem eigenen Konfigurationsabschnitt erweitert haben.

Hier ist die Liste der Cmdlets auf niedriger Ebene, die wir seit der Tech Preview 1 im April 2008 bereitstellen:

Add-WebConfiguration                                                                               
Add-WebConfigurationProperty                                                                       
Begin-WebCommitDelay                                                                                  
Clear-WebConfiguration                                                                             
End-WebCommitDelay                                                                                    
Get-WebURL                                                                                            
Get-WebConfiguration                                                                               
Get-WebConfigurationProperty                                                                       
Get-WebItemState                                                                                   
Remove-WebConfigurationProperty                                                                    
Restart-WebItem                                                                                    
Set-WebConfiguration                                                                               
Set-WebConfigurationProperty   
Select-WebConfiguration                                                             
Start-WebItem                                                                                      
Stop-WebItem

Aufgabenbasierte Cmdlets

Jetzt kommt eine wichtige Neuigkeit. Für tägliche IIS-Aufgaben, wie das Erstellen von Websites, das Aktivieren der Anforderungsablaufverfolgung und das Hinzufügen eines Handlers oder Moduls, möchten Sie wahrscheinlich die aufgabenbasierten Cmdlets verwenden, die mit dem IIS PowerShell-Snap-In bereitgestellt werden. Hier ist eine Liste der aufgabenbasierten Cmdlets:

Add-WebConfigurationLock
Backup-WebConfiguration
Clear-WebRequestTracingSettings
ConvertTo-WebApplication
Disable-WebGlobalModule
Disable-WebRequestTracing
Enable-WebGlobalModule
Enable-WebRequestTracing
Get-WebAppDomain
Get-WebApplication
Get-WebAppPoolState
Get-WebBinding
Get-WebConfigFile
Get-WebConfigurationBackup
Get-WebConfigurationLocation
Get-WebConfigurationLock
Get-WebFilePath
Get-WebGlobalModule
Get-WebHandler
Get-WebItemState
Get-WebManagedModule
Get-WebRequest
Get-Website
Get-WebsiteState
Get-WebURL
Get-WebVirtualDirectory
New-WebApplication
New-WebAppPool
New-WebBinding
New-WebFtpSite
New-WebGlobalModule
New-WebHandler
New-WebManagedModule
New-Website
New-WebVirtualDirectory
Remove-WebApplication
Remove-WebAppPool
Remove-WebBinding
Remove-WebConfigurationBackup
Remove-WebConfigurationLocation
Remove-WebConfigurationLock
Remove-WebGlobalModule
Remove-WebHandler
Remove-WebManagedModule
Remove-Website
Remove-WebVirtualDirectory
Rename-WebConfigurationLocation
Restart-WebAppPool
Set-WebBinding
Set-WebGlobalModule
Set-WebHandler
Set-WebManagedModule
Start-WebAppPool
Start-Website
Stop-WebAppPool
Stop-Website

Hilfe für die aufgabenbasierten Cmdlets

Das integrierte Hilfesystem ist die einfachste Möglichkeit, um herauszufinden, welche Cmdlets verfügbar sind und wie sie verwendet werden. Der folgende Befehl listet alle IIS-Cmdlets auf.

get-command -pssnapin WebAdministration

Eine weitere Möglichkeit ist die Suche nach dem „-Web“-Präfix, das wir für alle IIS-Cmdlets verwenden. Verwenden Sie den folgenden Befehl:

get-command *-Web*

Das integrierte Hilfesystem liefert eine kurze Beschreibung zu einem einzelnen Cmdlet sowie seine erforderlichen Parameter und Argumente, und es bietet Beispiele für die Verwendung des Cmdlets. Probieren Sie Folgendes aus:

get-help New-WebSite

Um die vollständige Hilfe zu einem bestimmten Cmdlet zu erhalten, können Sie Folgendes eingeben:

get-help New-Website -full

Wenn Sie nur ein Beispiel für die Verwendung sehen möchten, versuchen Sie es mit dem folgenden Befehl:

get-help New-Website -example

End-to-End-Beispiel

Das Potenzial der aufgabenbasierten Cmdlets zeigt sich, wenn Sie sie für ein End-to-End-Szenario verwenden. Im folgenden Beispiel erstellen wir eine neue Website, fügen der Website einige Inhalte hinzu, nehmen einige Konfigurationsänderungen vor, aktivieren die Anforderungsablaufverfolgung und fordern die Seite mit den neuen Inhalten an.

Schritt 1: Erstellen einer neuen Website

Geben Sie die folgenden Befehle ein:

PS IIS:\>mkdir "$env:systemdrive\inetpub\MyNewWebSite"

Dadurch wird ein neues physisches Verzeichnis für unsere neue Website erstellt.

PS IIS:\>New-Website -name "MyNewWebSite" -PhysicalPath "$env:systemdrive\inetpub\MyNewWebSite" -port 81

Mit der obigen Zeile wird eine neue Website erstellt, die auf das neu erstellte Verzeichnis verweist und auf Port 81 lauscht.

Schritt 2: Hinzufügen von Inhalten zur Website

Mit den folgenden Befehlen wird im IIS-Namespace navigiert und eine neue Inhaltsdatei erstellt.

PS IIS:\>cd IIS:\sites\MyNewWebsite

Der obige Befehl navigiert zum Knoten „MyNewWebSite“ im IIS-Namespace.

PS IIS:\Sites\MyNewWebSite> dir

Der obige Befehl listet alle Inhalte der neuen Website auf. Es wird nichts angezeigt, da kein Inhalt vorhanden ist.

PS IIS:\Sites\MyNewWebSite> notepad "$(Get-WebFilePath .)\test.htm"

Der obige Befehl öffnet den Editor und ermöglicht es Ihnen, „test.htm“ zu bearbeiten. So müssen Sie sich den physischen Pfad Ihrer Website nicht merken. Geben Sie Text ein, z. B. „Hallo Welt“, und speichern Sie die Datei im Editor.

PS IIS:\Sites\MyNewWebSite> dir

Wenn Sie den „dir“-Befehl erneut eingeben, wird Ihnen die neu erstellte Datei „test.htm“ angezeigt.

PS IIS:\Sites\MyNewWebSite> Get-WebURL -content ".\test.htm"

Der obige Befehl sendet eine HTTP-Anforderung an die neu erstellte Website und gibt den Inhalt zurück, den Sie im Editor eingegeben haben.

Schritt 3: Aktivieren der Anforderungsablaufverfolgung

WICHTIG: Damit dieses Beispiel funktioniert, muss die Funktion der IIS-Ablaufverfolgung aktiviert werden. Öffnen Sie unter Windows Vista die „Systemsteuerung“, klicken Sie auf „Programme“ und wählen Sie „Windows-Features aktivieren oder deaktivieren“ aus. Wählen Sie „Ablaufverfolgung“ unter „Internetinformationsdienste“, „WWW-Dienste“, „Systemzustand und Diagnose“ aus, und klicken Sie dann auf „OK“.

Als letzten Schritt aktivieren wir die Anforderungsablaufverfolgung. Die Web-Anforderungsablaufverfolgung ist ein IIS-Feature, mit dem Sie ein detailliertes Protokoll darüber erhalten können, was während einer Anforderung ausgeführt wurde. Dieses Feature ist für viele Problembehandlungsszenarien äußerst wertvoll. Um die Web-Anforderungsablaufverfolgung zu aktivieren, müssen wir nur ein anderes ortsabhängiges Cmdlet namens „Enable-WebRequestTracing“ ausführen.

PS IIS:\Sites\MyNewWebSite> Enable-WebRequestTracing

Sehen wir uns jetzt in der Datei „web.config“ an, welche Konfiguration vom Cmdlet „Enable-WebRequestTracing“ geschrieben wurde. Dazu verwenden wir das Cmdlet „Get-WebConfigFile“, das auch ortsabhängig ist:

PS IIS:\Sites\MyNewWebSite> notepad (Get-WebConfigFile)

Die Konfiguration sieht wie folgt aus:

Inhalt der „web.config“-Datei

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <tracing>
            <traceFailedRequests>
                <add path="*">
                    <traceAreas>
                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                    </traceAreas>
                    <failureDefinitions timeTaken="00:00:30" statusCodes="200-500" verbosity="Warning" />
                </add>
            </traceFailedRequests>
        </tracing>
    </system.webServer>
</configuration>

Die wichtige Konfiguration ist die „failureDefinitions“-Regel. Standardmäßig wird eine Ablaufverfolgungsdatei generiert, wenn der Fehlercode zwischen 200 und 500 liegt oder die Anforderung länger als 30 Sekunden dauert. Wir senden eine Anforderung, die eine Antwort im Fehlerbereich 200–500 generiert, indem wir den folgenden Befehl ausführen:

PS IIS:\Sites\MyNewWebSite>Get-WebURL -url http://localhost:81/URL_DOES_NOT_EXIST

Eine Anforderung an eine nicht vorhandene Ressource generiert einen 404-Fehler. Um die Ablaufverfolgungsdatei anzuzeigen, müssen Sie zum folgenden Speicherort navigieren:

PS IIS:\Sites\MyNewWebSite>cd "$env:systemdrive\inetpub\logs\failedReqLogfiles\w3svc2\"

Jetzt können Sie die Ablaufverfolgungsdatei anzeigen, indem Sie die XML-Datei im Internet Explorer öffnen:

PS C:\inetpub\logs\FailedReqLogFiles\W3SVC2>&"$env:programfiles\Internet Explorer\iexplore.exe" "$env:systemdrive\inetpub\logs\failedReqLogfiles\w3svc2\fr000001.xml"

Zusammenfassung

Die neuen aufgabenbasierten Cmdlets bieten Administratoren eine einfache Möglichkeit, tägliche IIS-Aufgaben mit PowerShell auszuführen. Die Cmdlets sind ortsabhängig und bieten eine intuitive Syntax und Hilfe.

Die IIS-Cmdlets auf niedriger Ebene, die seit der Tech Preview 1 bereitgestellt werden, ermöglichen zudem erweiterte IIS-Verwaltungsaufgaben.