PowerShell スナップイン: 高度な構成タスク

作成者 Thomas Deml

このチュートリアルでは、XPath クエリとワイルドカードを使用し、いくつかの高度な構成タスクを実行する方法について説明します。

はじめに

前のチュートリアルでは、*-WebConfiguration コマンドレットと *-WebConfigurationProperty コマンドレットについて説明しました。 これらのコマンドレットには見かけ以上のものがあります。 -filter パラメーターは、構成セクションを指定する以上の機能があります。 これは XPath クエリであり、このチュートリアルでは、それを活用する方法について説明します。 *-WebConfiguration* コマンドでワイルドカードを使用できる優れた方法もあります。

このチュートリアルでは、前の例で作成したサイト、アプリケーション、仮想ディレクトリを使用します。

XPath クエリの使用

次は、Get-WebConfigurationProperty コマンドレットでワイルドカードを使用する方法を示す簡単な例です。

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //defaultDocument/files -name Collection[value="index*"] | select value

もう 1 つご覧ください。 ASPNET_ISAPI.DLL で実行されるすべてのハンドラー マッピングは次のようになります。

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

ASP.Net ファイルの.aspx 拡張機能があまりお気に召さないので、すべての IIS ハンドラー マッピングを *.aspx から *.mspx に変更するとします。 これより短くなるでしょうか。

PS IIS:\Sites\DemoSite\DemoApp> set-webconfiguration "/system.webServer/handlers/add[@path='*.aspx']/@path" -value "*.mspx"

変更が設定されたかどうか見てみましょう。

(get-webconfiguration //handlers).collection | select name,path

次に、構成ファイル自体を見てみましょう。 前のチュートリアルで説明した get-item コマンドレットを使用できます。

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>

この構成システムによって古いハンドラーが削除され、新しいハンドラーに置き換えられ、その新しいハンドラーが *.mspx にマッピングされていることがわかります。

IIS 構成を理解する

構成しようとしているものが理解できていれば、申し分ありません。 理解していなければどうでしょうか。 理解に役立つようなものをいくつか紹介します。

利用できる IIS 構成セクションです。

get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | select SectionPath

特定のセクションで構成できるプロパティです。

get-webconfiguration system.webServer/caching | select -exp Attributes | select Name

2 つをまとめます。つまり、すべてのセクションとそのプロパティになります。

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

これらのコマンドは、後の Tech Preview で一部の機能に組み込むかもしれませんが、今のところはこのようになります。

まとめ

このチュートリアルでは、ワイルドカードと XPath クエリを使用して複雑な IIS 構成タスクを実行する方法について説明しました。 次のチュートリアルでは、状態データと実行時データを検出する方法について説明します。