PowerShell スナップイン: 高度な構成タスク
発行日 : 2008 年 4 月 14 日 (作業者 : thomad(英語))
更新日 : 2009 年 3 月 9 日 (作業者 : thomad(英語))
このチュートリアルでは、XPath クエリとワイルドカードを使用して、いくつかの高度な構成タスクを実行する方法について説明します。
はじめに
前述のチュートリアルでは、*-WebConfiguration と *-WebConfigurationProperty のコマンドレットについて説明しました。これらのコマンドレットは、説明した以外の機能も備えています。-filter パラメーターには、構成セクションを指定する以外の使用方法もあります。それは XPath クエリと呼ばれる方法です。このチュートリアルでは、XPath クエリを利用する方法について説明します。また、*-WebConfiguration* コマンドでワイルドカードを使用する方法についても説明します。
ここでは、前述の例で作成したサイト、アプリケーション、および仮想ディレクトリを使用します。
XPath クエリの使用
最初に、Get-WebConfigurationProperty コマンドレットでワイルドカードを使用する簡単な例を示します。
PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //defaultDocument/files -name Collection[value="index*"] | select value
さらに別の例です。この例では、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 構成タスクを実行する方法について説明しました。次のチュートリアルでは、状態とランタイム データを検出する方法について説明します。