PowerShell-Snap-In: Erweiterte Konfigurationsaufgaben
von Thomas Deml
In dieser exemplarischen Vorgehensweise erfahren Sie, wie Sie einige erweiterte Konfigurationsaufgaben mithilfe von XPath-Abfragen und Platzhaltern ausführen können.
Einführung
In der vorherigen exemplarischen Vorgehensweise wurden Sie mit den Cmdlets „*-WebConfiguration“ und „*-WebConfigurationProperty“ vertraut gemacht. Diese Cmdlets haben mehr zu bieten, als man auf den ersten Blick sieht. Der Parameter „-filter“ dient nicht nur der Angabe eines Konfigurationsabschnitts. Er ist eine XPath-Abfrage, und in dieser exemplarischen Vorgehensweise wird besprochen, wie wir das nutzen können. Es gibt auch einige sinnvolle Möglichkeiten, um Platzhalter mit den „*-WebConfiguration*“-Befehlen zu verwenden.
In dieser exemplarischen Vorgehensweise werden die Websites, Anwendungen und virtuellen Verzeichnisse verwendet, die in vorherigen Beispielen erstellt wurden.
Verwenden von XPath-Abfragen
Hier ist ein einfaches Beispiel, das zeigt, wie Sie Platzhalter mit dem „Get-WebConfigurationProperty“-Cmdlet verwenden können:
PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //defaultDocument/files -name Collection[value="index*"] | select value
Und noch ein weiteres. Hier alle Handlerzuordnungen, die von ASPNET_ISAPI.DLL ausgeführt werden:
PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //handlers -name Collection[scriptProcessor="*aspnet_isapi.dll"] | select name,path
name path
---- ----
svc-ISAPI-2.0-64 *.svc
svc-ISAPI-2.0 *.svc
AXD-ISAPI-2.0 *.axd
PageHandlerFactory-ISAPI-2.0 *.mspx
SimpleHandlerFactory-ISAPI-2.0 *.ashx
WebServiceHandlerFactory-ISAPI-2.0 *.asmx
HttpRemotingHandlerFactory-rem-ISAPI-2.0 *.rem
HttpRemotingHandlerFactory-soap-ISAPI-2.0 *.soap
AXD-ISAPI-2.0-64 *.axd
PageHandlerFactory-ISAPI-2.0-64 *.mspx
SimpleHandlerFactory-ISAPI-2.0-64 *.ashx
WebServiceHandlerFactory-ISAPI-2.0-64 *.asmx
HttpRemotingHandlerFactory-rem-ISAPI-2.0-64 *.rem
HttpRemotingHandlerFactory-soap-ISAPI-2.0-64 *.soap
Angenommen, Sie mögen die „.aspx“-Erweiterung für Ihre ASP.Net-Dateien nicht besonders und möchten alle IIS-Handlerzuordnungen von „*.aspx“ in „*.mspx“ ändern. Könnte es noch kürzer sein?
PS IIS:\Sites\DemoSite\DemoApp> set-webconfiguration "/system.webServer/handlers/add[@path='*.aspx']/@path" -value "*.mspx"
Sehen wir uns an, ob die Änderungen festgelegt wurden:
(get-webconfiguration //handlers).collection | select name,path
Jetzt sehen wir uns die Konfigurationsdatei selbst an. Wir können das „get-item“-Cmdlet verwenden, das in einer vorherigen exemplarischen Vorgehensweise beschrieben wurde.
PS IIS:\Sites\DemoSite\DemoApp> get-content (((get-item .).physicalPath).ToString() + "\web.config")
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="PageHandlerFactory-ISAPI-2.0-64" />
<remove name="PageHandlerFactory-ISAPI-2.0" />
<remove name="PageHandlerFactory-Integrated" />
<add name="PageHandlerFactory-Integrated" path="*.mspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
<add name="PageHandlerFactory-ISAPI-2.0" path="*.mspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.mspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
</handlers>
</system.webServer>
</configuration>
Sie können sehen, dass das Konfigurationssystem die alten Handler entfernt und durch neue Handler ersetzt hat, die jetzt „*.mspx“ zugeordnet sind.
Informationen zur IIS-Konfiguration
Es ist gut, wenn Sie wissen, was Sie konfigurieren möchten. Aber was, wenn nicht? Hier sind ein paar Tipps.
Anzeigen der verfügbaren IIS-Konfigurationsabschnitte:
get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | select SectionPath
Anzeigen der Eigenschaften, die Sie in einem bestimmten Abschnitt konfigurieren können:
get-webconfiguration system.webServer/caching | select -exp Attributes | select Name
Anzeigen der beiden Informationen, also aller Abschnitte mit ihren Eigenschaften:
get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | foreach {$_.SectionPath.ToUpper();get-webconfiguration $_.SectionPath | select -exp Attributes | select Name;"`n"} | more
Wir werden diese Befehle wahrscheinlich bei einer späteren Tech Preview in einige Funktionen setzen, aber im Moment ist das alles :).
Zusammenfassung
In dieser exemplarischen Vorgehensweise haben Sie erfahren, wie Sie komplexe IIS-Konfigurationsaufgaben mithilfe von Platzhaltern und XPath-Abfragen ausführen können. In der nächsten exemplarischen Vorgehensweise wird erläutert, wie Status- und Laufzeitdaten ermittelt werden.