Hiroshi Okunushi's Blog ☆ミ| IIS PHP etc.

IIS7, PHP on IIS を中心とした情報発信ブログです。

Blogs

[独自翻訳] もう少し進んだシステム構成タスク

  • Comments 3
  • Likes

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* コマンドを実行する際にワイルドカードを使う良い方法もみてみます。

本ウォークスルーは前に作成したサイト、アプリケーション、仮想ディレクトリを使用します。

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[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 の構成から発見する

どこを構成すればいいか知っていれば最高ですが、もし知らなかったらどうすればいいんでしょう? ちょっとヒントです。

存在している 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 クエリーを使って実施する方法を学びました。次のウォークスルーは状態と実行時情報へのアクセス方法を取り上げます。

/* 翻訳 終わり*/

Comments
  • This post is a translation of the article specified below. 本投稿は IIS.NET の記事をブログオーナーが独自に翻訳したものです。参考情報としてご利用ください。

  • この記事が無ければ、またTech Netに色々質問するところでした。

    感謝です。

    でも!

    get-webconfiguration //*

    こんなこと思いもよらなかった・・・ちょっとムカツクー

  • はい。そのムカツクーは私が受け止めます。(^-^)

    PowerShell Provider は R2/Win7 に入りましたのでぜひ他の皆さまもご活用ください。PowerShell そのものについてはぜひ田辺に聞いてくださいね。

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment