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.