Freigeben über


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.