[独自翻訳] ハンドラーやモジュールに関するシステム構成情報の追加、変更

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

ウォークスルーの一覧は [独自翻訳] IIS 7.0 PowerShell プロバイダ を使ってみよう!  をご覧ください。

/* 原文*/

Changing Simple Settings in Configuration Sections
https://learn.iis.net/page.aspx/436/changing-simple-configuration-settings-in-configuration-sections

/*翻訳*/

前のウォークスルーではサイト、アプリケーションプール、アプリケーションおよび仮想ディレクトリなどの IIS ネームスペースコンテナを管理する方法を学びました。

本ウォークスルーでは IIS ネームスペースで公開されていない構成設定を管理していきます。

はじめに

IIS のネームスペース経由で構成できないいくるかの設定を構成させてくれるいくつかのコマンドレットがあります。つまり、ビルトインのコマンドレットを使って変更できない設定があるということです。 この場合には IIS専用コマンドレットを利用する必要があります。どんなコマンドレットが提供されているかまず眺めてみましょう。これには get-command コマンドレットを使います。

PS IIS:\AppPools> get-command -pssnapin IIsProviderSnapIn | ft

CommandType Name Definition
----------- ---- ----------
Cmdlet Add-WebConfiguration Add-WebConfiguration [-Filter] <String...
Cmdlet Add-WebConfigurationProperty Add-WebConfigurationProperty [-Filter]...
Cmdlet Begin-Transaction Begin-Transaction [[-PSPath] <String[]...
Cmdlet Clear-WebConfiguration Clear-WebConfiguration [-Filter] <Stri...
Cmdlet End-Transaction End-Transaction [[-PSPath] <String[]>]...
Cmdlet Get-section Get-section [-Section] <String> [-PSPa...
Cmdlet Get-URL Get-URL [-Url <String>] [-PSPath <Stri...
Cmdlet Get-WebConfiguration Get-WebConfiguration [-Filter] <String...
Cmdlet Get-WebConfigurationProperty Get-WebConfigurationProperty [-Filter]...
Cmdlet Get-WebItemState Get-WebItemState [[-PSPath] <String[]>...
Cmdlet Remove-WebConfigurationProperty Remove-WebConfigurationProperty [-Filt...
Cmdlet Restart-WebItem Restart-WebItem [[-PSPath] <String[]>]...
Cmdlet Set-WebConfiguration Set-WebConfiguration [-Filter] <String...
Cmdlet Set-WebConfigurationProperty Set-WebConfigurationProperty [-Filter]...
Cmdlet Start-WebItem Start-WebItem [[-PSPath] <String[]>] [...
Cmdlet Stop-WebItem Stop-WebItem [[-PSPath] <String[]>] [-...

本ウォークスルーは *-WebConfiguration* コマンドレットに焦点をあてます。また、本ウォークスルーは以前のウォークスルーで作成したサイト、アプリケーション、仮想ディレクトリに依存しています。

Get-WebConfiguration と Get-WebConfigurationProperty

Get-WebConfiguration と Get-WebConfigurationProperty は IIS の構成ファイル内のセクションを取得するのに利用できます。Get-Item と Get-ItemProperty によく似ていることがわかります。Get-Item* はネームスペースのコンテナ(サイト、アプリケーション、アプリケーションプール、仮想ディレクトリ)のみに有効なのに対して Get-WebConfiguration* はどの IIS 構成セクションにも使えます。

補足:基礎知識が無いと厳しいかもしれませんね。IIS7.0 では以前メタベースと呼ばれていたシステム構成のメカニズムが applicationHost.config あるいはそれを継承する web.config という XML ファイルで保持するように変更になっています。そしてこれは ASP.NET の構成メカニズムを取り込んだものです。各設定をグルーピングしたものがセクションです。

構成設定をクエリーする

前に作成した DemoApp アプリケーションに対して directoryBrowse セクション内の有効になっている設定を見てみましょう。まずは DemoApp フォルダへ移動して、その上でこのフォルダに対するを認証設定を確認してみましょう。以下のようにしてみます。

PS IIS:\> cd IIS:\Sites\DemoSite\DemoApp
PS IIS:\Sites\DemoSite\DemoApp> dir

    Directory: IIsProviderSnapIn\WebAdministration::\\THDLAP\Sites\DemoSite\DemoApp

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 3/26/2008 12:40 PM 31 Default.htm

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled
False

ここでは -filter パラメータを使ってセクションを指定しています。そして -name パラメータを使ってどのプロパティを見たいかを指定しています。もし現在のパスではない構成設定を見たい場合には -PSPath プロパティを使用して行うことができます。Default Web Site のディレクトリ参照設定をクエリーする例です。

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled -PSPath 'IIS:\Sites\Default Web Site'
False

Set-WebConfigurationProperty を使用する

設定の変更は下記のようにとても簡単です。

PS IIS:\Sites\DemoSite\DemoApp> Set-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled -value true

ロックされたセクションを取り扱う

さあひとつ問題があります。認証関係のセクションは通常ロックされています。つまり、これらは web.config ファイルの個別設定はできず、applicationhost.config ファイルに書き込まないといけないということです。下記のコマンドを使ってWindows 認証を有効にしようとするとするとロック違反でエラーになります。

Set-WebConfigurationProperty : この構成セクションをこのパスで使用できません。こ
の問題は、親レベルでセクションがロックされているときに発生します。ロック状態は
既定で設定されているか (overrideModeDefault="Deny")、または overrideMode="Deny"
もしくは従来の allowOverride="false" を含んだ場所タグによって明示的に設定され
ます。
発生場所 行:1 文字:29
+ Set-WebConfigurationProperty <<<< -filter /system.webServer/security/authent
ication/windowsAuthentication -name enabled -value true

ここで何をすべきかというと -PSPath と -location パラメータを使います。下記のコマンドはアプリケーション DemoApp の Windows 認証を有効にします。この構成は applicationhost.config に書かれますが、<location>タグつきで書かれることになります。ロッキングや location タグについては ここ を参照ください。

PS IIS:\Sites\DemoSite\DemoApp> Set-WebConfigurationProperty -filter /system.webServer/security/authentication/windowsAuthentication -name enabled -value true -PSPath IIS:\ -location DemoSite/DemoApp

構成をクエリーするだけであれば location を指定する必要はありません。Get-WebConfigurationProperty コマンドで設定が有効になっているのを確認できます。

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter /system.webServer/security/authentication/windowsAuthentication -name enabled
True

Get-WebConfiguration 対 Get-WebConfigurationProperty

これは Get-Item 対 Get-ItemProperty と同じ違いです。Get-WebConfiguration はプロパティ一つではなくて、セクション全体を取得します。変数にセクションの設定を格納し、セクション内の色々な設定変更を行って、セクション全体を Set-WebConfiguration で保存することができます。さらにコマンド完成機能のメリットもあります。

一例です。コピー&ペーストはやめましょう。windowsAuthentication セクションのプロパティを探検しましょう。$winAuth. とだけ入力し、<TAB> キーを繰り返し入力することで、存在するプロパティや関数を順番に見ることができます。

PS IIS:\Sites\DemoSite\DemoApp> $winAuth = Get-WebConfiguration -filter /system.webServer/security/authentication/windowsAuthentication
PS IIS:\Sites\DemoSite\DemoApp> $winAuth.enabled = $false
PS IIS:\Sites\DemoSite\DemoApp> $winAuth | set-Webconfiguration -filter /system.webServer/security/authentication/windowsAuthentication -PSPath IIS:\ -location "DemoSite/DemoApp"

Add-WebConfiguration

IISの構成コレクションに何かを追加したい場合に使うコマンドレットは Add-WebConfiguration です。ハンドラー、モジュール、既定のドキュメント などがコレクションで複数の値を格納する場合の例です。

下記は DemoApp 既定のドキュメントコレクションに新しい値を追加する場合の例です。

PS IIS:\Sites\DemoSite\DemoApp>Add-WebConfiguration /system.webServer/defaultDocument/files "IIS:\sites\Default Web Site" -at 0 -value
@{value="new-index.html"}

この例では追加のパラメーター -at を使用しています。これにより、新しい値をコレクションのどの位置に追加するかを指定しています。0 は はじめに、-1 は最後に追加することを意味します。

まとめ

本ウォークスルーでは Web 構成を扱う IIS 専用コマンドレットについて学びました。構成設定をクエリーする方法、location タグを使って設定をする方法、コマンドライン完成機能を生かす方法、そしてコレクションに値を追加する方法 それぞれについて学びました。

次のウォークスルーではもっと複雑な構成タスクを globbing や XPath を使って実施する方法を学びます。

/* 翻訳 終わり*/

Comments

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