IIS 7.0 WMI プロバイダーを使用したサイトの管理

発行日 : 2007 年 11 月 23 日 (作業者 : saad(英語))
更新日 : 2008 年 3 月 19 日 (作業者 : saad(英語))

はじめに

このドキュメントでは、WMI を紹介し、IIS 7.0 の WebAdministration 名前空間を使用したサイト管理に関して順を追って説明します。サイトの作成、削除、停止、開始、変更の方法を学びます。これらすべてのタスクは、アプリケーション プールや仮想ディレクトリなどのオブジェクトにも簡単に応用できます。

特定のサイトのプロパティの表示、サイトの作成または削除、サーバー上のすべてのサイトの確認といった作業を行なう必要がある場合、ここではまさにそれらの方法を説明しています。このドキュメントでは、サイトに関連した大半のタスクについて順を追って解説し、WMI の基本的な概要を示します。

この記事のタスクおよびセクションには、次のものが含まれます。

  • 開始する前に

  • サイト インスタンスの取得 (単一キー オブジェクト)

  • アプリケーション インスタンスの取得 (複数キー オブジェクト)

  • サイトの作成

  • すべてのサイトの列挙

  • サイトの停止および開始

  • サイトの削除

  • まとめ

これらのタスクの多くは、ApplicationPool などの他のオブジェクトでも同様の方法で実行されます。この記事の最後で、ここで学習した知識を使用して ApplicationPool オブジェクトを作成、削除、および変更できるかどうか、試してみてください。

このドキュメントでは CIM Studio を活用しています。このツールの情報については、CIM Studio (英語) を参照してください。

開始する前に

IIS 7.0 のインストール

このドキュメントの手順を実行するには、IIS 7.0 をインストールする必要があります。https://localhost/ を参照でき、IIS の既定のページが表示される場合は、ご使用のマシンに IIS 7.0 がインストールされています。IIS 7.0 がインストールされていない場合は、「Installing IIS7 on Windows Vista」のインストール手順を参照してください。

WMI プロバイダーのインストール

[管理ツール] (または [Web 管理ツール]) で [IIS 管理スクリプトおよびツール] コンポーネントを選択して、IIS 7.0 WMI プロバイダーをインストールします。Windows Vista では、これは [Windows の機能] ダイアログ ボックスの [インターネット インフォメーション サービス] の下にあります。Windows Server® 2008 では、これは [サーバー マネージャー] の [Web サーバー (IIS)] の役割の下にあります。

(CIM Studio を含む) WMI ツールのインストール

Microsoft Download Center (英語) から WMI Administrative Tools をインストールします。

必要な特権とユーザー アカウント制御 (UAC)

WebAdministration WMI 名前空間に接続するには、管理者であることが必要です。つまり、次のいずれかでログインする必要があります。

  • Windows Server 2008 のビルトインの Administrator アカウント。
  • Administrators グループのメンバーであり、ユーザー アカウント制御 (UAC) を無効にしている。
  • Administrators グループのメンバーであり、UAC を有効にしている。

1 番目か 2 番目の場合は、この記事で取り上げられているアクセス許可の問題は発生しません。

3 番目の場合は、アクセス拒否に遭遇します。この問題は、常に管理者としてコマンド プロンプトを開き、管理者特権のコマンド プロンプトから CIM Studio を起動することで回避できます。

管理者としてコマンド プロンプトを開くには、[スタート] ボタン、[すべてのプログラム][アクセサリ] の順にクリックし、[コマンド プロンプト] を右クリックして [管理者として実行] を選択します。

管理者特権のコマンド プロンプトから CIM Studio を起動するには

  1. 管理者としてコマンド プロンプトを開きます。
  2. **「%systemdrive%\Program Files\WMI Tools\studio.htm」**と入力して Enter キーを押します。

バックアップの作成

終了後にシステムを元の状態に復元できるように、開始する前に主要な IIS 7.0 構成ファイルをバックアップします。

  1. コマンド プロンプトを開きます。
  2. **「%windir%\system32\inetsrv\appcmd add backup IIS7_WMI_CIMStudioLab」**と入力します。

予期される出力 : 

                    BACKUP object "IIS7_WMI_CIMStudioLab" added
                  
  • 終了したら、管理者としてコマンド プロンプトを開いて**「%windir%\system32\inetsrv\appcmd restore backup IIS7_WMI_CIMStudioLab」**と入力し、IIS 7.0 を元の状態に復元します。

予期される出力 : 

                    Restored configuration from backup "IIS7_WMI_CIMStudioLab"
                  

1. サイト インスタンスの取得

サイト インスタンスを取得するには、[スタート] をクリックし、[検索の開始] ボックスをクリックして、**「notepad.exe」**と入力し Enter キーを押します。次のスクリプト行をメモ帳に貼り付けます。

                    

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

[ファイル][名前を付けて保存] の順にクリックし、保存ダイアログ ボックスを開きます。ダイアログ ボックスの下部の [ファイルの種類] ボックスで、[テキスト文書 (*.txt)] から [すべてのファイル] に変更します。"GetSite.vbs" と名前を付けてファイルをデスクトップに保存します。

Ee155429.Managing Sites fig1(ja-jp,TechNet.10).jpg  

 

[スタート] をクリックし、[検索の開始] ボックスをクリックして、**「cmd.exe」と入力し Enter キーを押します。「cd %SystemDrive%\Users\Administrator\Desktop」と入力して、Enter キーを押します。「cscript //h:cscript」**と入力して、Enter キーを押します。これにより、既定のスクリプト ホストが cscript.exe に設定されます。cscript.exe は、それが開始されたコマンド ウィンドウ内に出力を送信します。詳細については、Running Scripts from Windows (英語) を参照してください。

**「GetSite.vbs」**と入力して、Enter キーを押します。エラーなしでスクリプトが実行されれば、WebAdministration 名前空間への接続は成功しています。"winmgmts:root\WebAdministration" 文字列の詳細については、Constructing a Moniker String (英語) を参照してください。GetSite.vbs スクリプトに、次の 4 つの行を追加します。この 4 つのスクリプト行は、Default Web Site を取得し、2 つのプロパティを出力します。それらのプロパティが正常に出力されると、成功が確認されます。

                    

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



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

WScript.Echo "Retrieved an instance of Site " 
        

WScript.Echo "        Name: " & oSite.Name 
            

WScript.Echo "        ID:   " & oSite.ID

コマンド プロンプトに戻って、GetSite.vbs を実行します。以下のように出力されるはずです。

Retrieved an instance of Site

Name: Default Web Site

ID: 1            

"Get" がどのように機能するかを確認するために、[スタート][すべてのプログラム][WMI Tools][WMI CIM Studio] の順にクリックします。WebAdministration 名前空間に接続し (「CIM Studio を使用した IIS 7.0 WMI プロバイダーの確認」を参照してください)、Site クラスを検索します。CIM Studio の右側のウィンドウに、Site のプロパティが表示されます。次のスクリーン ショットで赤い線で囲まれているように、Name プロパティがキー アイコンの横に示されます。

Ee155429.Managing Sites fig2(ja-jp,TechNet.10).jpg  

1 つのクラスには 1 つまたは複数の**「キー」**となるプロパティがあります。この 1 つまたは複数のキーのセットは、オブジェクトを一意に識別します。詳細については、「Describing an Instance Object Path (英語)」を参照してください。実際には、文字列 "Site.Name='Default Web Site'" は、「キー プロパティ Name が 'Default Web Site' であるサイト オブジェクトのインスタンスを取得せよ」と指定していることになります。これが理解できたら、もう少し複雑なことを試してみましょう。

2. アプリケーション インスタンスの取得

アプリケーション インスタンスを取得するには、CIM Studio を開き、Application クラスを検索します。Application クラスには 2 つのキー プロパティがあることに注目してください。次のスクリーン ショットに示すように、"SiteName" および "Path" です。

Ee155429.Managing Sites fig3(ja-jp,TechNet.10).jpg  

 

[スタート] をクリックし、[検索の開始] ボックスをクリックして、**「notepad.exe」**と入力し Enter キーを押します。次のスクリプト行をメモ帳に貼り付けます。スクリプトの 2 行目は、Application の 2 つのキー プロパティ両方に対して値を指定しています。この文字列の形式は、<object_name>.<key_property>='<value>',<key_property>='<value>' となります。キー プロパティと値の組み合わせはカンマで区切ります。

                    

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


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

WScript.Echo "Successfully retrieved: '" & oApp.SiteName & oApp.Path & "'"

[ファイル][名前を付けて保存] の順にクリックし、保存ダイアログ ボックスを開きます。ダイアログ ボックスの下部の [ファイルの種類] ボックスで、[テキスト文書 (*.txt)] から [すべてのファイル] に変更します。"GetApp.vbs" と名前を付けてファイルをデスクトップに保存します。

[スタート] をクリックし、[検索の開始] ボックスをクリックして、**「cmd.exe」**と入力し Enter キーを押します。

**「cd %SystemDrive%\Users\Administrator\Desktop」**と入力して、Enter キーを押します。

**「GetApp.vbs」**と入力して、Enter キーを押します。次のように出力されます。

**Successfully retrieved: 'Default Web Site/'

3. サイト インスタンスの作成

サイト インスタンスを作成するには、CIM Studio に戻ってメソッド パラメーターを表示します。CIM Studio で Site クラスを検索します。右側のウィンドウで、[Methods] タブを選択します。

Ee155429.Managing Sites fig4(ja-jp,TechNet.10).jpg  

Create メソッドを右クリックし、[Edit Method Parameters] を選択します。下のような、Create メソッドのパラメーターを示すダイアログ ボックスが表示されます。[Cancel] をクリックします。

Ee155429.Managing Sites fig5(ja-jp,TechNet.10).jpg 

このメソッドがどのようなパラメーターを受け取るかを確認したら、次のスクリプト行をメモ帳に貼り付けて、それらのパラメーターの変数を作成します。

                    

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

  

' Create a binding for the site


            


Set oBinding = oIIS.Get("BindingElement").SpawnInstance_


            

oBinding.BindingInformation = "*:80:www.newsite.com"


            

oBinding.Protocol = "http"

            

  

' These are the parameters we pass to the Create method


            

name = "NewSite"


            

physicalPath = "C:\inetpub\wwwroot"

            

arrBindings = array(oBinding)

[ファイル][名前を付けて保存] の順にクリックし、保存ダイアログ ボックスを開きます。ダイアログ ボックスの下部の [ファイルの種類] ボックスで、[テキスト文書 (*.txt)] から [すべてのファイル] に変更します。"CreateSite.vbs" と名前を付けてファイルをデスクトップに保存します。

[スタート] をクリックし、[検索の開始] ボックスをクリックして、**「cmd.exe」**と入力し Enter キーを押します。

**「cd %SystemDrive%\Users\Administrator\Desktop」**と入力して、Enter キーを押します。

**「CreateSite.vbs」**と入力して、Enter キーを押します。問題がなければ、スクリプトはエラーなしで実行されるはずです。

CIM Studio に戻り、Create メソッドを再び右クリックして、今度は [Method Qualifiers] を選択します。下の図に示すように、表示されるダイアログ ボックスで、Create メソッドは静的なメソッドであることが示されます。[Cancel] をクリックします。

Ee155429.Managing Sites fig6(ja-jp,TechNet.10).jpg  

静的なメソッドは、オブジェクト定義から呼び出す必要があります。下のスクリプトのサンプルは、オブジェクト インスタンスの取得と、オブジェクト定義の取得の違いを示しています。+

Set oIIS = GetObject("winmgmts:root\WebAdministration")        
' In order to retrieve an object instance, the object's key properties
' and their values must be specified in the WMI object instance path

Set oSite = oIIS.Get("Site.Name='Default Web Site'")    
' The object definition can be retrieved by specifying the name
' of the object without any key properties and values

Set oSiteDefn = oIIS.Get("Site")

CreateSite.vbs スクリプトに、サイトを作成するための行を追加します。

Set oIIS = GetObject("winmgmts:root\WebAdministration")
' Create a binding for the site

Set oBinding = oIIS.Get("BindingElement").SpawnInstance_
oBinding.BindingInformation = "*:80:www.newsite.com"
oBinding.Protocol = "http"
' These are the parameters we pass to the Create method
name = "NewSite"
physicalPath = "C:\inetpub\wwwroot"
arrBindings = array(oBinding)
' Get the Site object definition

Set oSiteDefn = oIIS.Get("Site")
' Create site!!
oSiteDefn.Create name, arrBindings, physicalPath
WScript.Echo "Site created successfully!"

コマンド プロンプトに戻って、CreateSite.vbs を実行します。次のように出力されます。

Site created successfully!

サイトが作成されたことを確かめるには、「notepad %windir%\system32\inetsrv\config\ApplicationHost.config」と入力します。Ctrl キーを押しながら F キーを押して、メモ帳の [検索] ダイアログ ボックスを表示します。[検索する文字列] ボックスに「NewSite」と入力し、[次を検索] をクリックします。これにより、新しく定義されたサイトの <sites> セクションに移動します。

 < site name="NewSite" id="2" > 
   < application path="/" > 
      < virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" /> 
   </ application > 
   < bindings > 
      < binding protocol="http" bindingInformation="*:80:www.newsite.com" /> 
   </ bindings > 
 </ site > 

オブジェクトの作成/削除/変更に関する注記

WebAdministration 名前空間では、すべてのオブジェクトが作成または削除できるわけではありません。たとえば、サーバーは WorkerProcess オブジェクトおよび AppDomain オブジェクトのライフサイクルを管理しており、これらのオブジェクトは WMI 経由で作成または削除できません。

あるオブジェクトが作成、削除、または変更可能かどうかを確認する一般的な方法を知るには、CIM Studio で Site を検索します。[Properties] タブのプロパティ グリッドを右クリックし、[Object Qualifiers] をクリックします。下のようなダイアログ ボックスが表示されます。

Ee155429.Managing Sites fig7(ja-jp,TechNet.10).jpg 

オブジェクト修飾子 SupportsCreate、SupportsDelete、および SupportsUpdate は、オブジェクトが作成、削除、または変更可能かどうかを示します。Site は作成、削除、および変更が可能です。よって、Site にはこれら 3 つの修飾子すべてがあり、すべて true になっています。

CIM Studio で WorkerProcess を検索します。[Properties] タブのプロパティ グリッドを右クリックし、[Object Qualifiers] をクリックします。下図のダイアログ ボックスが表示され、WorkerProcess オブジェクトにはそれら 3 つの修飾子がないことを示しています。それらの修飾子の値は、既定で false となっています (詳細については、「Standard Qualifiers (英語)」を参照してください)。そのため、WorkerProcess オブジェクトは作成、削除、または変更できません。

Ee155429.Managing Sites fig8(ja-jp,TechNet.10).jpg  

4. すべてのサイト インスタンスの列挙

次のスクリプトは、InstancesOf メソッドを使用して Site オブジェクトのすべてのインスタンスを取得します。下のスクリプトを新しいメモ帳のウィンドウに貼り付けて、"EnumSites.vbs" と名前を付けて保存します。

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

Set oSites = oIIS.InstancesOf("Site")

For Each oSite In oSites            
     WScript.Echo oSite.Name & " (" & oSite.Id & ")"

Next

EnumSites.vbs スクリプトを実行します。次のように出力され、Default Web Site と、タスク 3 で作成したサイトが表示されます。

Default Web Site (1)

NewSite (2)        

詳細情報

InstancesOf メソッドはどこから来たのか、それについての詳細情報はどこで入手できるのかという疑問が生じるかもしれません。スクリプトの最初の行は、WebAdministration WMI 名前空間に接続するために以前に使用されたものと同じです。

Set oIIS = GetObject("winmgmts:root\WebAdministration").

GetObject 呼び出しは、名前空間に対して操作を実行するための SWbemServices オブジェクトを返します。このオブジェクトには、InstancesOf メソッドをはじめ、その他の多数の有用なメソッドがあります。InstancesOf またはその他の使用可能なメソッドの詳細については、SWbemServices に関するプラットフォーム SDK の記事 (英語) を参照してください。

5. サイトの開始と停止

サイトの状態を変更する前に、サイトの現在の状態を知る必要があります。次のスクリプトは、WebAdministration 名前空間に接続し、Site インスタンスを取得し、その Site インスタンスの GetState メソッドを呼び出します。GetState メソッドは数値のステータスを返すため、このスクリプトには、数値のステータスをよりわかりやすい文字列に変換するためのヘルパー関数が含まれています。このスクリプトを新しいメモ帳のウィンドウに貼り付けて、それを "GetSiteStatus.vbs" と名前を付けて保存します。

                    

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



Set oSite = oIIS.Get("Site.Name='NewSite'")

WScript.Echo GetStateDescription(oSite.GetState)
' -------helper functions-----------

Function GetStateDescription(statusCode)

Select Case statusCode
               Case 1
GetStateDescription = "Started"
             Case 2
GetStateDescription = "Starting"
                Case 3
GetStateDescription = "Stopped"
             Case 4
GetStateDescription = "Stopping"
                Case 5
GetStateDescription = "Unknown"
             Case Else

GetStateDescription = "Error: Bad Status"

End Select


End Function

コマンド プロンプトから GetSiteStatus.vbs を実行すると、次のように出力されます。

Started

このサイトは開始済みなので、それを停止するスクリプトを作成します。GetSiteStatus.vbs からスクリプト コードをコピーし、サイトを停止するために数行を追加します (新規の行または更新された行は太字になっています)。このスクリプトを新しいメモ帳のウィンドウに貼り付けて、それを "StopSite.vbs" と名前を付けて保存します。

Set oIIS = GetObject("winmgmts:root\WebAdministration")
            
Set oSite = oIIS.Get("Site.Name='NewSite'")
                        
WScript.Echo GetStateDescription(oSite.GetState)
' -------helper functions-----------
Function GetStateDescription(statusCode)
Select Case statusCode
                Case 1
GetStateDescription = "Started"
                Case 2
GetStateDescription = "Starting"
                Case 3
GetStateDescription = "Stopped"
                Case 4
GetStateDescription = "Stopping"
                Case 5
GetStateDescription = "Unknown"
                Case Else
GetStateDescription = "Error: Bad Status"
End Select
End Function

StopSite.vbs スクリプトを実行すると、次の結果が表示されます。

NewSite is Started

NewSite is Stopped    

次に、サイトを再度開始します。StopSite.vbs をコピーして、StartSite.vbs という名前の新しいスクリプトを作成します。StartSite.vbs を開いて、oSite.Stop の行を oSite.Start に変更します。StartSite.vbs を実行すると、次のように出力されるはずです。

NewSite is Stopped

NewSite is Started            

6. サイトの削除

タスク 4 で作成した EnumSites.vbs スクリプトを実行します。サーバー上に 2 つのサイトがあることを示す、次のような出力が表示されるはずです。

Default Web Site (1)

NewSite (2)        

次のスクリプトは、WebAdministration 名前空間に接続し、NewSite のサイト インスタンスを取得し、それを削除します。このスクリプトを新しいメモ帳のウィンドウに貼り付けて、それを "DeleteSite.vbs" と名前を付けて保存します。

                    

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



Set oSite = oIIS.Get("Site.Name='NewSite'")
 

oSite.Delete_

コマンド プロンプトから DeleteSite.vbs を実行します。

EnumSites.vbs をもう一度実行して、NewSite が正常に削除されたことを確認します。次のような出力が表示され、サーバー上に残っているサイトは Default Web Site のみであることが示されます。

Default Web Site (1)

まとめ

Site オブジェクトまたは Application オブジェクトの特定のインスタンスを取得する方法、サイトの作成方法、すべての Site インスタンスを列挙する方法、サイトの停止方法および開始方法、そして最後にサイトを削除する方法を学びました。この情報の大半は、名前空間内の他のオブジェクトにも適用可能です。たとえば、Application オブジェクトや ApplicationPool オブジェクトは、サイトと同様の方法で作成および削除できます。