This post is a translation of the article specified below. 本投稿は IIS.NET の記事をブログオーナーが独自に翻訳したものです。参考情報としてご利用ください。
ウォークスルーの一覧は [独自翻訳] IIS 7.0 PowerShell プロバイダ を使ってみよう! をご覧ください。
/*原文*/
Advanced Configuration Tasks http://learn.iis.net/page.aspx/437/powershell-provider-advanced-configuration-tasks
/*翻訳*/
本ウォークスルーでは XPath クエリーやワイルドカードを使い方で今までよりももっと複雑な構成タスクを実行する方法を学びます。
前のウォークスルーでは *-WebConfiguration や *-WebConfigurationProperty コマンドレットを使いました。一見するよりも実はこれらのコマンドレットは奥が深いです。-filter パラメータは特定の構成セクションを指定するだけのパラメータではありません。実はこれは XPath クエリーでこのウォークスルーではどのようにこれを生かせるかを探検してみます。 さらに *-WebConfiguration* コマンドを実行する際にワイルドカードを使う良い方法もみてみます。
本ウォークスルーは前に作成したサイト、アプリケーション、仮想ディレクトリを使用します。
下記は 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[scr iptProcessor="*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 構成セクションの一覧を取得する
get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | select SectionPath
特定のセクションで構成できるプロパティの一覧を取得する
get-webconfiguration system.webServer/caching | select -exp Attributes | select Name
二つを組み合わせて、すべてのセクションとその構成可能なプロパティの一覧を取得する
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 版では関数にしようと思っていますが、今はできることはこんな感じです。:-)
本ウォークスルーでは複雑な IIS 構成タスクをワイルドカードを使ったり、XPath クエリーを使って実施する方法を学びました。次のウォークスルーは状態と実行時情報へのアクセス方法を取り上げます。
/* 翻訳 終わり*/
この記事が無ければ、またTech Netに色々質問するところでした。
感謝です。
でも!
get-webconfiguration //*
こんなこと思いもよらなかった・・・ちょっとムカツクー
はい。そのムカツクーは私が受け止めます。(^-^)
PowerShell Provider は R2/Win7 に入りましたのでぜひ他の皆さまもご活用ください。PowerShell そのものについてはぜひ田辺に聞いてくださいね。