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

作成者 : Thomas Deml
発行日 : 2008 年 7 月 2 日 (作業者 : pharr(英語))
更新日 : 2009 年 3 月 9 日 (作業者 : pharr(英語))

はじめに

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

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

このチュートリアルでは、タスクベースの IIS コマンドレットについて説明し、コマンドレットの使用方法の例をいくつか示します。

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

IIS の開発の初期段階において、IIS の構成は、サイト、アプリケーション、仮想ディレクトリ、およびアプリケーション プールの階層とすることに決定されました。この利点は、階層内の場所 (サイトやアプリケーションなど) に移動して、そのコンテキストに応じた設定を行なうことが可能なことです。階層の操作をサポートするには、New-Item、Set-ItemProperty など、事前に定義された特定の PowerShell コマンドレットが実装されている必要があります。階層とこれらの組み込みコマンドレットは、2008 年 4 月の Tech Preview 1 によって提供が開始されました。

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

IIS の構成システムは、バージョン 7 で全面的に改訂されました。新しい構成システムは、完全に XML ベースとなり、スキーマ駆動型で、全面的に拡張可能です。新しい IIS FTP サーバー (FTP7) や、その他多数の IIS7 モジュール (URL リライト モジュール、WebDAV など) では、この拡張性を利用して IIS7 構成システムにプラグインする方式を採用しています。

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

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

また、すべての 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 の機能の有効化または無効化] を選択します。[Internet Information Services][World Wide Web サービス][健常性と診断] の下で [追跡] をオンにし、[OK] をクリックします。Windows Server 2008 ではサーバーマネージャーの Web サーバー (IIS) の役割の中から [トレース] を有効にします。

最後の手順では、要求トレースを有効にします。Web 要求トレースは、要求の実行中に発生した事項の詳細なログを取得できる IIS7 の機能です。この機能は、多くのトラブルシューティング シナリオで利用できるため非常に便利です。Web 要求トレースを有効にするには、Enable-WebRequestTracing という名前の、実行場所を認識する別のコマンドレットを実行する必要があります。

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 https://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 管理タスクを実行できます。