PowerShell スナップイン: IIS PowerShell スナップインのタスク ベースのコマンドレットの使用

作成者 Thomas Deml

はじめに

IIS PowerShell スナップイン コマンドレットは、次の 3 つのカテゴリにグループ化できます。

  • プロバイダー階層で必要なコマンドレット
  • 低レベルの構成コマンドレット
  • タスク ベースのコマンドレット

このチュートリアルでは、タスク ベースの IIS コマンドレットを紹介し、それらの使用例をいくつか示します。

プロバイダー階層で必要なコマンドレット

IIS では、早い段階で、サイト、アプリケーション、仮想ディレクトリ、アプリケーション プールの階層として IIS 構成を使用できるようにすることが決まりました。 この利点は、顧客が階層内の場所 (サイトやアプリケーションなど) に移動し、そのコンテキストで設定を設定できることです。 ナビゲーション階層をサポートするために、New-Item、Set-ItemProperty などの特定の定義済みの PowerShell コマンドレットを実装する必要がありました。 階層とこれらの組み込みコマンドレットは、2008 年 4 月に Tech Preview 1 で出荷されました。

低レベルの構成コマンドレット

IIS 構成システムは、バージョン 7 で完全に改訂されました。 新しい構成システムは、完全に XML ベースのスキーマ駆動型で、高度に拡張可能です。 新しい IIS FTP サーバー (FTP7) と、URL リライター、WebDAV などの他の多くの IIS モジュールでは、この拡張性を利用して IIS 構成システムに接続されています。

この拡張性により、静的な引数を持つコマンドレットを配布するのが困難になります。 誰かが既存の構成セクションを拡張する場合を考えてみます。たとえば、誰かが myFancyNewBehavior プロパティを virtualDirectory 構成セクションに追加するとします。 IIS コマンドレットを変更しないと、fancyNewBehavior 設定を PowerShell スナップイン コマンドレットを使用して設定することはできません。

IIS PowerShell スナップインの Technical Preview 1 には、構成の拡張性全体を考慮した低レベルのコマンドレットのみが含まれていました。 すべての IIS 構成設定 (コレクション、列挙型などを含む 100 を超える構成セクション) は、これらのコマンドレットを使用して構成できます。 これらの低レベルのコマンドレットは、独自の構成セクションを使用して IIS 構成を拡張した場合など、カスタム構成に対しても機能します。

2008 年 4 月の Tech Preview 1 以降に付属する低レベルのコマンドレットの一覧を次に示します。

Add-WebConfiguration                                                                               
Add-WebConfigurationProperty                                                                       
Begin-WebCommitDelay                                                                                  
Clear-WebConfiguration                                                                             
End-WebCommitDelay                                                                                    
Get-WebURL                                                                                            
Get-WebConfiguration                                                                               
Get-WebConfigurationProperty                                                                       
Get-WebItemState                                                                                   
Remove-WebConfigurationProperty                                                                    
Restart-WebItem                                                                                    
Set-WebConfiguration                                                                               
Set-WebConfigurationProperty   
Select-WebConfiguration                                                             
Start-WebItem                                                                                      
Stop-WebItem

タスク ベースのコマンドレット

素晴らしいお知らせがあります。 Web サイトの作成、要求トレースの有効化、ハンドラーまたはモジュールの追加などの日常的な IIS タスクについて、IIS PowerShell スナップインに付属するタスク ベースのコマンドレットを使用することができます。 タスク ベースのコマンドレットの一覧を次に示します。

Add-WebConfigurationLock
Backup-WebConfiguration
Clear-WebRequestTracingSettings
ConvertTo-WebApplication
Disable-WebGlobalModule
Disable-WebRequestTracing
Enable-WebGlobalModule
Enable-WebRequestTracing
Get-WebAppDomain
Get-WebApplication
Get-WebAppPoolState
Get-WebBinding
Get-WebConfigFile
Get-WebConfigurationBackup
Get-WebConfigurationLocation
Get-WebConfigurationLock
Get-WebFilePath
Get-WebGlobalModule
Get-WebHandler
Get-WebItemState
Get-WebManagedModule
Get-WebRequest
Get-Website
Get-WebsiteState
Get-WebURL
Get-WebVirtualDirectory
New-WebApplication
New-WebAppPool
New-WebBinding
New-WebFtpSite
New-WebGlobalModule
New-WebHandler
New-WebManagedModule
New-Website
New-WebVirtualDirectory
Remove-WebApplication
Remove-WebAppPool
Remove-WebBinding
Remove-WebConfigurationBackup
Remove-WebConfigurationLocation
Remove-WebConfigurationLock
Remove-WebGlobalModule
Remove-WebHandler
Remove-WebManagedModule
Remove-Website
Remove-WebVirtualDirectory
Rename-WebConfigurationLocation
Restart-WebAppPool
Set-WebBinding
Set-WebGlobalModule
Set-WebHandler
Set-WebManagedModule
Start-WebAppPool
Start-Website
Stop-WebAppPool
Stop-Website

タスク ベースのコマンドレットのヘルプ

組み込みのヘルプ システムを使用すると、使用できるコマンドレットとその使用方法を非常に簡単に確認できます。 次のコマンドは、すべての IIS コマンドレットを一覧表示します。

get-command -pssnapin WebAdministration

もう 1 つの方法は、すべての IIS コマンドレットで使用する -Web プレフィックスを探す方法です。 次のコマンドを試してください。

get-command *-Web*

組み込みのヘルプ システムでは、個々のコマンドレットと、それが受け取るパラメーターと引数の簡単な説明、およびコマンドレットの使用方法の例が示されます。 次の操作を試してみてください。

get-help New-WebSite

特定のコマンドレットに関する詳細なヘルプを受け取るためには、次のように入力します。

get-help New-Website -full

使用方法の例のみを表示する場合は、次のコマンドを試してください。

get-help New-Website -example

エンドツーエンドの例

タスク ベースのコマンドレットの利点は、エンドツーエンドのシナリオで使用する場合に発揮されます。 次の例では、新しい Web サイトを作成し、Web サイトにいくつかのコンテンツを追加し、構成を変更し、要求トレースを有効にして、新しいコンテンツ ページを要求します。

手順 1: 新しい Web サイトを作成する

次のコマンドを入力します。

PS IIS:\>mkdir "$env:systemdrive\inetpub\MyNewWebSite"

これにより、新しいサイト用の新しい物理ディレクトリが作成されます。

PS IIS:\>New-Website -name "MyNewWebSite" -PhysicalPath "$env:systemdrive\inetpub\MyNewWebSite" -port 81

上の行は、新しく作成されたディレクトリを指し、ポート 81 をリッスンする新しい Web サイトを作成します。

手順 2: サイトへのコンテンツの追加

次のコマンドは、IIS 名前空間内に移動し、新しいコンテンツ ファイルを作成します。

PS IIS:\>cd IIS:\sites\MyNewWebsite

上のコマンドは、IIS 名前空間の MyNewWebSite ノードに移動します。

PS IIS:\Sites\MyNewWebSite> dir

上のコマンドは、新しい Web サイトのすべてのコンテンツを一覧表示します。 コンテンツがないため、何も表示されません。

PS IIS:\Sites\MyNewWebSite> notepad "$(Get-WebFilePath .)\test.htm"

上のコマンドはメモ帳を開き、test.htm を編集できるようにします。 Web サイトの物理的なパスを覚えておく必要がなくなります。 テキストを入力します (例:"Hello World")。メモ帳でファイルを保存します。

PS IIS:\Sites\MyNewWebSite> dir

dir コマンドをもう一度入力すると、新しく作成されたファイル test.htm が表示されます。

PS IIS:\Sites\MyNewWebSite> Get-WebURL -content ".\test.htm"

上のコマンドにより、新しく作成された Web サイトに HTTP 要求が送られ、メモ帳に入力したコンテンツが返されます。

手順 3: 要求トレースを有効にする

重要: この例を機能させるには、IIS トレース機能を有効にする必要があります。 Windows Vista でコントロール パネルを開き、[プログラム] をクリックして [Windows の機能の有効化または無効化] を選びます。 [インターネット インフォメーション サービス]、[World Wide Web サービス]、[状態と診断] で [トレース] を見つけて選択し、[OK] をクリックします。

最後の手順として、要求トレースを有効にします。 Web 要求トレースは、要求の実行中に発生した内容についての詳細なログを取得できるようにする IIS 機能です。 この機能は、多くのトラブルシューティング シナリオで非常に役立ちます。 Web 要求トレースを有効にするには、Enable-WebRequestTracing という場所に対応するもう 1 つの cmldet を実行するだけです。

PS IIS:\Sites\MyNewWebSite> Enable-WebRequestTracing

次に、Enable-WebRequestTracing コマンドレットによって web.config ファイルに書き込まれた構成を見てみましょう。 そのためには、場所に対応する Get-WebConfigFile コマンドレットを使用します。

PS IIS:\Sites\MyNewWebSite> notepad (Get-WebConfigFile)

構成は次のようになります。

web.config ファイルの内容

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <tracing>
            <traceFailedRequests>
                <add path="*">
                    <traceAreas>
                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                    </traceAreas>
                    <failureDefinitions timeTaken="00:00:30" statusCodes="200-500" verbosity="Warning" />
                </add>
            </traceFailedRequests>
        </tracing>
    </system.webServer>
</configuration>

重要な構成は、failureDefinitions ルールです。 既定では、エラー コードが 200 から 500 の間、または要求に 30 秒を超える時間がかかる場合に、トレース ファイルが生成されます。 次のコマンドを実行して、200 から 500 のエラー範囲の応答を生成する要求を発行してみましょう。

PS IIS:\Sites\MyNewWebSite>Get-WebURL -url http://localhost:81/URL_DOES_NOT_EXIST

存在しないリソースに対する要求により、404 エラーが生成されます。 トレース ファイルを確認するには、次の場所に移動する必要があります。

PS IIS:\Sites\MyNewWebSite>cd "$env:systemdrive\inetpub\logs\failedReqLogfiles\w3svc2\"

Internet Explorer で xml ファイルを開いてトレース ファイルを確認できます。

PS C:\inetpub\logs\FailedReqLogFiles\W3SVC2>&"$env:programfiles\Internet Explorer\iexplore.exe" "$env:systemdrive\inetpub\logs\failedReqLogfiles\w3svc2\fr000001.xml"

まとめ

新しいタスク ベースのコマンドレットを使用すると、管理者は PowerShell を使用して日常的な IIS タスクを簡単に実行できます。 これらのコマンドレットは、場所を認識する、直感的な構文とヘルプを提供します。

Tech Preview 1 以降に付属する低レベルの IIS コマンドレットでは、より高度な IIS 管理タスクを引き続き実行できます。