WMI を使用した IIS 7.0 のアプリケーションとアプリケーション プールの管理

作成者 : Tim Ammann
発行日 : 2007 年 11 月 23 日 (作業者 : saad(英語))
更新日 : 2008 年 2 月 29 日 (作業者 : saad(英語))

はじめに

IIS 7.0 のアプリケーションおよびアプリケーション プールの管理は、WMI スクリプトを使用することで比較的簡単に実行できます。この記事では、わずか数行の VBScript によって次のエントリレベルのタスクを実行する方法について説明します。

  • アプリケーションの作成と列挙
  • アプリケーション プールの作成、構成、および削除
  • アプリケーション プールの開始、停止、およびリサイクル
  • アプリケーション プールの状態の表示
  • サーバー上の全アプリケーション プールの一覧表示

最初の手順

  1. IIS とスクリプトを有効にします。

    • Windows Vista を使用している場合は、[コントロール パネル][プログラムと機能] から [Windows の機能] を開きます。[Web 管理ツール] の下の [IIS 管理スクリプトおよびツール] を選択して、スクリプトを有効にします。

    • Windows Server® 2008 を使用している場合は、[サーバー マネージャー] を開きます。役割の追加ウィザードを使用して IIS 7.0 Web サーバーをインストールします。[役割サービスの選択] ページの [管理ツール] セクションで、[IIS 管理スクリプトおよびツール] を選択します。

  2. 各種コマンドは管理者として実行します。管理者特権でコマンド プロンプト ウィンドウを開くには、[スタート] ボタン、[すべてのプログラム][アクセサリ] の順にクリックし、[コマンド プロンプト] を右クリックして [管理者として実行] をクリックします。管理者としてコマンド シェルを開くと、そのコマンド シェルから実行するすべてのアプリケーションは管理者として実行されます。

  3. スクリプト ファイルは、.vbs 拡張子を付けてテキスト形式で保存します。それらは、"cscript.exe <scriptname>.vbs" という構文でコマンド プロンプトから実行できます。

  4. 開始する前に、AppCmd ツールを使用して、System32\inetsrv\config\applicationhost.config ファイルのバックアップを作成します。バックアップ コピーを作成しておくと、現バージョンに対して元のバージョンを上書きコピーすることで、IIS 7.0 を元の状態に復元できます。バックアップを作成するには、次の手順を実行します。

a. 管理者特権でコマンド プロンプト ウィンドウを開きます。

b. 「cd %Windir%\system32\inetsrv\」と入力します。

c. 「appcmd add backup <backupName>」と入力して、ApplicationHost.config ファイルのバックアップを作成します。<backupName> には、バックアップ名を指定します。ここで指定したバックアップ名を持つディレクトリが、%Windir%\system32\inetsrv\backup ディレクトリの下に作成されます。名前を指定しないと、現在の日付と時刻を使用したディレクトリ名が自動的に生成されます。

アプリケーションの作成と列挙

IIS 7.0 で WMI スクリプトを使用すると、アプリケーションの作成や列挙が簡単に実行できます。

アプリケーションの作成

IIS 7.0 ではアプリケーションを作成するために、新しいアプリケーションの Create メソッドを使用します。この静的メソッドでは、ApplicationPath と SiteName という 2 つの文字列パラメーターを指定する必要があります。ApplicationPath には新しいアプリケーションの仮想パスを指定し、SiteName にはアプリケーションを作成する Web サイトの名前を指定します。3 番目のパラメーターである PhysicalPath には、ディスク上のアプリケーション ディレクトリのパスを指定しますが、これは省略可能です。

ApplicationPath と SiteName は重要なプロパティで、アプリケーションの作成後に変更することはできません (ApplicationPath は UI では [仮想パス] として表示されることに注意してください)。

次のスクリプトは、既定の Web サイトに "NewApp" という新しいアプリケーションを作成します。Application のクラス定義にある Create メソッドを呼び出す方法に注目してください。このスクリプトをメモ帳にコピーして、AppCreate.vbs というファイル名で保存してください。

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

  

' Define the Path, SiteName, 
and
 PhysicalPath 
for
 the new 
application
.

strApplicationPath = "/NewApp"

strSiteName = "Default Web Site"

strPhysicalPath = "D:\inetpub\NewApp"

  




' Create the new 

application



oWebAdmin.Get("Application").Create _




      strApplicationPath, strSiteName, strPhysicalPath

スクリプトを実行するには、管理者特権でコマンド プロンプト ウィンドウを開き、AppCreate.vbs ファイルを保存したディレクトリに移動します。このコマンド プロンプト ウィンドウで次のコマンドを入力して、スクリプトを実行します。

Cscript.exe AppCreate.vbs

Create が正常に実行されるには、ApplicationPath と SiteName を指定する必要があることを思い出してください。また、PhysicalPath プロパティも任意で指定します。PhysicalPath パラメーターに存在しないディレクトリを指定しても、そのディレクトリは作成されません。この場合、スクリプトは警告なしで終了し、アプリケーションの新しいノードが [IIS マネージャー] に表示されます。ただし、新しいアプリケーションのノードを開こうとすると、"パス <path> の一部が見つかりませんでした" というエラーが表示されます。

アプリケーションの列挙

アプリケーションを作成したら、WMI スクリプトを使用してそのプロパティを簡単に表示できます。

次の VBScript は、サーバー上の各アプリケーションのサイト名、アプリケーション パス、アプリケーション プール、有効なプロトコルを表示します。このスクリプトでは、WMI の InstancesOf メソッドを使用してすべてのアプリケーションを取得してから、それらをすべて反復してそれぞれのプロパティを表示しています。

このコードをメモ帳にコピーして、AppEnumerate.vbs というファイル名で保存してください。

                    

                    
' Connect to the WMI WebAdministration namespace.


Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

  

' Use InstancesOf to retrieve the applications.


Set oApps = oWebAdmin.InstancesOf("Application")

  

' Iterate through the applications.


For Each oApp In oApps

    WScript.Echo "  Web site/Application: " & oApp.SiteName & oApp.Path

    WScript.Echo "      Application Pool: " & oApp.ApplicationPool

    WScript.Echo "   Enabled protocol(s): " & oApp.EnabledProtocols

    WScript.Echo


Next

スクリプトを実行するには、管理者特権でコマンド プロンプト ウィンドウを開き、AppEnumerate.vbs ファイルを保存したディレクトリに移動します。このコマンド プロンプト ウィンドウで次のコマンドを入力して、スクリプトを実行します。

Cscript.exe AppEnumerate.vbs

次は Web アプリケーションをホストするアプリケーション プールを作成、構成、および管理する方法について説明します。

アプリケーション プールの作成と構成

ここでは、WMI スクリプトを使用してアプリケーション プールに対して実行可能な、基本的かつ重要ないくつかのタスクについて説明します。アプリケーション プールは 1 つまたは複数のアプリケーションを 1 つまたは複数のワーカー プロセスに接続します。アプリケーション プールはそれぞれのアプリケーションの分離に役立ちます。この分離によって、アプリケーションのセキュリティと信頼性が高まります。

アプリケーション プールの作成

IIS 7.0 ではアプリケーション プールを作成するために、ApplicationPool クラスの Create メソッドを使用します。この静的メソッドには、2 つのパラメーターを指定します。1 番目の AppPoolName は必須パラメーターで、新しいアプリケーション プールの名前を指定する文字列です。2 番目の AutoStart は省略可能なブール値です。

AutoStart の既定値は true です。これにより、アプリケーション プールが作成後に開始されること、および IIS 7.0 自体が開始したときにそのアプリケーション プールも自動的に開始されることを指定します。AutoStart を false に設定した場合は、アプリケーション プールを手動で開始することが必要になります。ただし、アプリケーション プールが開始する前にアプリケーション プール内のアプリケーションの構成やコンテンツの変更を行いたい場合は、自動開始を無効にすると役立ちます。

次の例では、わずか 3 行のコードによって、"NewAppPool" と "OneMoreAppPool" という 2 つのアプリケーション プールを作成します。Create メソッドが、ApplicationPool のインスタンスではなく、クラス定義から呼び出されていることに注意してください。

このスクリプトをメモ帳にコピーして、AppPoolCreate.vbs というファイル名で保存してください。

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")
oWebAdmin.Get("ApplicationPool").Create("NewAppPool")
oWebAdmin.Get("ApplicationPool").Create("OneMoreAppPool")

 スクリプトを実行するには、管理者特権でコマンド プロンプト ウィンドウを開き、AppPoolCreate.vbs ファイルを保存したディレクトリに移動します。このコマンド プロンプト ウィンドウで次のコマンドを入力して、スクリプトを実行します。

Cscript.exe AppPoolCreate.vbs

アプリケーション プールの対話的な作成

わずか数行のコードを追加するだけで、アプリケーション プールを対話的に作成するための入力ボックスを表示する便利なスクリプトを作成できます。ここでも同様に、スクリプトをコピーしてメモ帳に貼り付け、.vbs 拡張子を付けてファイルとして保存して、cscript.exe を使用してファイルを実行します。

                    

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

 

strNewAppPoolName = InputBox("Enter the name for the new application pool.")

 


If strNewAppPoolName <> "
" Then


    oWebAdmin.Get("ApplicationPool").Create(strNewAppPoolName)


End If

アプリケーション プールへのアプリケーションの割り当て

アプリケーション プールを作成したら、これにアプリケーションを割り当てます。WMI スクリプトを使用すると、アプリケーションが割り当てられるアプリケーション プールを簡単に変更できます。ただし、次の 2 つの点に注意してください。まず、IIS 7.0 は指定のアプリケーション プールが実際に存在するかどうかをチェックしないため、最初にアプリケーション プールを作成しておくことが必要です。次に、アプリケーション プールの割り当ての変更を保存する際は、Put_ メソッドを使用してください。Application クラスは WMI から Put_ メソッドを継承します。

次のスクリプトは、既定の Web サイトの "/NewApp" アプリケーションのアプリケーション プールを "NewAppPool" に変更します。ここでも同様に、このスクリプトをコピーしてメモ帳に貼り付け、AppPoolAssign.vbs というファイル名で保存し、cscript.exe を使用してファイルを実行します。

                    

Set
 oWebAdmin = 
GetObject
("
winmgmts:root\WebAdministration
")

 


' Retrieve the NewApp 
application
.


Set oApp = oWebAdmin.Get("Application.SiteName='Default Web Site',Path='/NewApp'")

WScript.Echo "Application Web site and Path: '" & oApp.SiteName & oApp.Path & "'"

WScript.Echo "Old application pool: " & oApp.ApplicationPool

WScript.Echo

 

' Specify the new 
application
 pool name.

oApp.ApplicationPool = "NewAppPool"

 

' Save the change.

oApp.Put_

 

' Display the new 
application
 pool name.

WScript.Echo

WScript.Echo "New application pool: " & oApp.ApplicationPool

特定のアプリケーション プールの削除

古いアプリケーション プールを完全に削除したい場合は、ApplicationPool クラスが WMI から継承する Delete_ メソッドを使用できます。

次のスクリプトでは、以前に作成した "OneMoreAppPool" という名前のアプリケーション プールを削除します。前と同じように、このスクリプトをコピーしてメモ帳に貼り付けてください。それを AppPoolDelete.vbs というファイル名で保存して、cscript.exe を使用して実行します。

                    

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

 


Set oAppPools = oWebAdmin.InstancesOf("ApplicationPool")


For Each oAppPool In oAppPools

    If oAppPool.Name = "
OneMoreAppPool
" Then


        oAppPool.Delete_

        Exit For

   End If


Next

Web サイトの既定のアプリケーション プールの設定

あるアプリケーション プールを Web サイトの全アプリケーションの既定のアプリケーション プールに設定したい場合は、Site オブジェクトの ApplicationDefaults.ApplicationPool プロパティを使用します。ここでも、Site オブジェクトの Put_ メソッドを使用して、変更を保存します。

次のスクリプトは、既定の Web サイトの既定のアプリケーション プールを、以前に作成した "NewAppPool" に設定します。このスクリプトをコピーしてメモ帳に貼り付け、SetAppPoolDefault.vbs というファイル名で保存し、cscript.exe を使用して実行します。

                    

                    

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

 

' Retrieve the default Web site.


Set oSite = oWebAdmin.Get("Site.Name='Default Web Site'")

 

' Specify the new default 
application
 pool name.

oSite.ApplicationDefaults.ApplicationPool = "NewAppPool"

 

' Save the change.

oSite.Put_

アプリケーション プールの管理

WMI スクリプトを使用すると、アプリケーション プールの開始、停止、リサイクル、および作成を簡単に実行することができます。ここでは、これらの各タスクの実行方法を示します。さらに、アプリケーション プールの現在の状態の取得方法も示します。

アプリケーション プールの停止

IIS 7.0 の ApplicationPool.Stop メソッドは、IIS 6.0 の IIsApplicationPool.Stop メソッドに対応します。

アプリケーション プールの停止は、3 行のスクリプトで実行できます。次のスクリプトをコピーしてメモ帳に貼り付け、AppPoolStop.vbs というファイル名で保存し、cscript.exe を使用して実行します。

                      

                      
' Connect to the WMI WebAdministration namespace.


Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

 

' Specify the 
application
 pool.


Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='DefaultAppPool'")

 

' Stop the 
application
 pool.

oAppPool.Stop

アプリケーション プールの開始

IIS 7.0 には、IIS 6.0 の IIsApplicationPool.Start メソッドに対応する ApplicationPool.Start メソッドが実装されています。

アプリケーション プールの開始も同様に簡単です。次のスクリプトをコピーしてメモ帳に貼り付け、AppPoolStart.vbs というファイル名で保存し、cscript.exe を使用して実行します。

                      

                      
' Connect to the WMI WebAdministration namespace.


Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

 

' Specify the application pool.


Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='DefaultAppPool'")

 

' Start the application pool.

oAppPool.Start

アプリケーション プールのリサイクル

IIS 7.0 の ApplicationPool.Recycle メソッドは、IIS 6.0 の IIsApplicationPool.Recycle メソッドに対応します。

アプリケーション プールのリサイクルも前述の例と同じパターンです。ただし、Recycle メソッドは既に開始されているアプリケーション プールでのみ動作することに注意してください。

次のスクリプトをコピーしてメモ帳に貼り付け、AppPoolRecycle.vbs というファイル名で保存し、cscript.exe を使用して実行します。

                      

                      

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")


Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='DefaultAppPool'")

 

' Recycle the 
application
 pool.

oAppPool.Recycle

アプリケーション プールの状態の取得

アプリケーション プールの実行時の状態は、ApplicationPool オブジェクトの GetState メソッドを使用して取得できます。GetState メソッドは 0 ~ 4 の列挙値を返します。次の例では、これらの値の意味と、シンプルなヘルパー関数を使ってそれらを表示する方法を示します。IIS 6.0 にはこのメソッドに直接対応するものはありません。

このスクリプトをコピーしてメモ帳に貼り付け、AppPoolState.vbs というファイル名で保存し、cscript.exe を使用して実行します。

                      

                      

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")


Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='DefaultAppPool'")

 

' 
Get
 the 
application
 pool's name 
and
 its state.

WScript.Echo oAppPool.Name & " is " & _
      GetStateDescription(oAppPool.GetState) & "."
 

' The helper 
function
 translates the return value into text.


Function GetStateDescription(StateCode)

    Select Case StateCode

        Case 0

            GetStateDescription = "Starting"

        Case 1

            GetStateDescription = "Started"

        Case 2

            GetStateDescription = "Stopping"

        Case 3

            GetStateDescription = "Stopped"

        Case 4

            GetStateDescription = "Unknown"

        Case Else


            GetStateDescription = "Undefined value."

    End Select


End Function

戻り値には、スクリプトが実行された時点のアプリケーション プールの状態が反映されることに注意してください。当然のことながら、値はリアルタイムでは更新されません。リアルタイムでの更新が必要な場合は、タスクをスケジュールして、設定された間隔で 1 つまたは複数の特定アプリケーション プールの状態を報告するスクリプトを実行します。

サーバー上のアプリケーション プールの一覧表示

WMI の InstancesOf メソッドを使用すると、すべてのアプリケーション プールを取得できます。その後、それらをすべて反復してそれぞれのプロパティを表示できます。次のコードは、アプリケーション プールとそれらのモード (Integrated または ISAPI) を表示します。

次のスクリプトをコピーしてメモ帳に貼り付け、ListAppPools.vbs というファイル名で保存し、cscript.exe を使用して実行します。

                      

                      

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

 


Set oAppPools = oWebAdmin.InstancesOf("ApplicationPool")

 


For Each oAppPool In oAppPools

 

    WScript.Echo "Application pool name: " & oAppPool.Name

 

    If oAppPool.ManagedPipelineMode = 0 Then


        sAppPoolMode = "Integrated"

 

    ElseIf oAppPool.ManagedPipelineMode = 1 Then

        sAppPoolMode = "ISAPI"

 

    End if

 

    WScript.Echo "Application pool mode: " & sAppPoolMode

    WScript.Echo 


Next

次のような出力が得られます。

                      

                      


Application
 pool name: DefaultAppPool



Application
 pool mode: Integrated

 



Application
 pool name: Classic .NET AppPool



Application
 pool mode: ISAPI

まとめ

この記事では、WMI スクリプトを使用して以下の基本的なタスクを実行する方法を説明しました。

  • アプリケーションの作成と列挙
  • アプリケーション プールの作成、構成、および削除
  • アプリケーション プールの開始、停止、およびリサイクル
  • アプリケーション プールの状態の表示
  • サーバー上の全アプリケーション プールの一覧表示

Application クラスと ApplicationPool クラスには、この記事では採り上げていない他の機能もあります。詳細については、IIS 7.0 WMI プロバイダーのリファレンス (英語)を参照してください。