Freigeben über


PowerShell-Snap-In: Verwenden der taskbasierten Cmdlets des IIS-PowerShell-Snap-Ins

von Thomas Deml

Einführung

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

  • Cmdlets, die von der Anbieterhierarchie benötigt werden
  • Konfigurations-Cmdlets 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.

Cmdlets Erforderlich für die Anbieterhierarchie

IIS hat sich frühzeitig entschieden, die IIS-Konfiguration als Hierarchie von Websites, Anwendungen, virtuellen Verzeichnissen und Anwendungspools verfügbar zu machen. Der Vorteil besteht darin, dass Kunden zu einem Ort in der Hierarchie navigieren können, zum Beispiel zu einer Webseite oder Anwendung, und in diesem Kontext Einstellungen 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 Tech Preview 1 ausgeliefert.

Konfigurations-Cmdlets auf niedriger Ebene

Das IIS-Konfigurationssystem wurde in Version 7 vollständig überarbeitet. Das neue Konfigurationssystem ist vollständig XML-basiert, schemagesteuert und vollständig erweiterbar. Der neue IIS FTP Server (FTP7) und viele andere IIS-Module wie url Rewriter, WebDAV usw. nutzen diese Erweiterung, um das IIS-Konfigurationssystem zu verbinden.

Diese Erweiterbarkeit macht es schwierig, Cmdlets mit statischen Argumenten zu versenden. Stellen Sie sich den Fall vor, in dem jemand einen vorhandenen Konfigurationsabschnitt erweitert, z. B. eine myFancyNewBehavior-Eigenschaft zum VirtualDirectory-Konfigurationsabschnitt hinzufügt. Ohne die Überarbeitung der IIS-Cmdlets könnte die Einstellung fancyNewBehavior nicht über die PowerShell-Snap-In-Cmdlets festgelegt werden.

Technical Preview 1 des IIS PowerShell-Snap-Ins enthielt nur niedrigstufige Cmdlets, die die gesamte Konfigurationserweiterung berücksichtigt haben. Jede IIS-Konfigurationseinstellung (mehr als 100 Konfigurationsabschnitte mit Sammlungen, Enumerationen usw.) können 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 Tech Preview 1 zurück im April 2008 versenden:

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

Hier kommt die spannende Nachricht. Für tägliche IIS-Aufgaben wie das Erstellen von Websites, die Aktivierung der Anforderungsablaufverfolgung oder das Hinzufügen eines Handlers oder Moduls möchte man wahrscheinlich die aufgabenbasierten Cmdlets verwenden, die im IIS PowerShell-Snap-In enthalten sind. 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

"Die Verwendung des integrierten Hilfesystems ist die einfachste Möglichkeit, 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 besteht darin, nach -Web Präfix zu suchen, das wir für alle IIS-Cmdlets verwenden. Probieren Sie diesen Befehl aus:

get-command *-Web*

Das integrierte Hilfesystem enthält eine kurze Beschreibung zu einem einzelnen Cmdlet, zu den Parametern und Argumenten, die es benötigt, und es enthält 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

Die Leistungsfähigkeit der aufgabenbasierten Cmdlets wird angezeigt, 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 neue Inhaltsseite 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

Die obige Zeile erstellt eine neue Website, die auf das neu erstellte Verzeichnis zeigt und Port 81 abhört.

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 (Notepad) und ermöglicht es Ihnen, test.htm zu bearbeiten. Anstatt sich merken zu müssen, wo sich der physische Pfad Ihrer Website befindet. Geben Sie Text ein, z. B. "Hello World", und speichern Sie die Datei im Notepad-Editor.

PS IIS:\Sites\MyNewWebSite> dir

Wenn Sie den Dir-Befehl erneut eingeben, wird ihnen die neu erstellte Datei test.htmangezeigt.

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 in Editor eingegeben haben.

Schritt 3: Aktivieren der Anforderungsablaufverfolgung

WICHTIG: Damit dieses Beispiel funktioniert, muss das IIS-Ablaufverfolgungsfeature aktiviert sein. Öffnen Sie unter Windows Vista die Systemsteuerung, klicken Sie auf "Programme", wählen Sie "Windows-Features ein- oder ausschalten" aus. Suchen und wählen Sie unter "Internetinformationsdienste", "World Wide Web Services", "Zustand und Diagnose" die Option "Ablaufverfolgung" aus, und klicken Sie auf "OK".

Im letzten Schritt aktivieren wir die Anforderungsnachverfolgung. Die Webanforderungsablaufverfolgung 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 Webanforderungsablaufverfolgung zu aktivieren, müssen wir nur einen anderen standortfähigen cmldet namens Enable-WebRequestTracing ausführen.

PS IIS:\Sites\MyNewWebSite> Enable-WebRequestTracing

Sehen wir uns nun die web.config-Datei an, welche Konfiguration durch das Cmdlet Enable-WebRequestTracing geschrieben wurde. Dazu verwenden wir das cmdlet Get-WebConfigFile, das auch standortfähig ist:

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

Die Konfiguration sieht wie folgt aus:

Inhalt der datei web.config

<?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. Lassen Sie uns eine Anforderung ausgeben, die eine Antwort im Fehlerbereich 200-500 generiert, indem Sie 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 Trace-Datei ansehen, indem Sie die XML-Datei in 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, die tägliche IIS-Aufgabe mit PowerShell auszuführen. Die Cmdlets bieten Standortbewusstsein und intuitive Syntax und Hilfe.

Die ab Tech Preview 1 ausgelieferten IIS-Cmdlets auf niedriger Ebene ermöglichen weiterhin erweiterte IIS-Verwaltungsaufgaben.