IIS による Web サイト管理の自動化
Curt Johnson
Web Technology Writer, IIS Documentation Team
Microsoft Corporation
Updated May 7, 1999
(新しいサンプルスクリプトと .vbs のダウンロード追加)
日本語版最終更新日 1999 年 8 月 27 日
目次
はじめに
Windows Scripting Host
IIS AdminオブジェクトとADSI
スクリプトの実行
サンプル スクリプトの例
カスタマイズ スクリプトの例
はじめに
Web サイトの管理は、特に大規模なインターネットサービスプロバイダ (ISP) の設備を管理している人々にとっては、時間とコストのかかる作業になりがちです。時間とコストを節約するために、多くの ISP は個人の Web サイトを犠牲にして、大企業の Web サイトだけをサポートしています。しかし、コスト効果の高い形で両者をサポートする方法はあるのでしょうか? もし、管理作業を自動化し、ユーザーにリモートコンピュータから自分のサイトを管理させることができれば、可能です。このソリューションは、サポートするWebサイトの数を減らすことなく、大規模な設備を手動で管理するための必要な時間とコストを削減します。Microsoft® Internet Information Server (IIS) version 4.0 は、まさにこれを実現するためのテクノロジを提供します。
- Windows Scripting Host (WSH)
- Active Directory Service Interfaces (ADSI) 上に構築された IIS Admin オブジェクト
舞台裏でこれらのテクノロジが共に機能することにより、管理者は中央のコンピュータのコマンドラインからサイトを管理し、頻繁に使用するコマンドをバッチファイルにまとめることができます。その後は、バッチファイルを実行するだけで、新しいアカウントを追加し、権限を変更し、サイトに仮想サーバーを追加するといったさまざまな作業を実行できます。さらに、個人用の Web サイトを管理する責任を、直接ユーザーに委譲することもできます。
この記事では、管理スクリプトを実行して、一般的な管理作業を実行する方法を説明します。たとえば、リモートサーバー上に新しい仮想ディレクトリを作成し、そのディレクトリに書き込みアクセス権を追加することが可能です。また、サーバー上の Windows NT® アクセス権が変更できるカスタムスクリプトのサンプルも紹介します。
Microsoft Windows NT Server version 4.0 と IIS をインストールすると、ADSI サンプルスクリプトと WSH 環境もデフォルトでインストールされます。サンプルスクリプトは、それ自体でも正常に機能しますが、独自のスクリプトをカスタマイズするときのテンプレートとしても利用できます。サンプル スクリプトの構文については、Windows NT 4.0 Option Pack の製品ドキュメントの「Sample Administration Scripts」を参照してください。
Windows Scripting Host (WSH)
WSH は、32 ビット Windows プラットフォームのための言語中立なスクリプティング環境です。Microsoft は、WSH 用に、Visual Basic® Scripting Edition (VBScript) と JScript® の両方のスクリプトエンジンを用意しています。サードパーティ企業も、Perl などの他の言語用の ActiveX® スクリプトエンジンを提供しています。
WSHは、任意のスクリプト言語を使って、サーバー上の管理作業を自動化することができます。たとえば、管理者は、VBScript で新しい仮想ディレクトリを作成するスクリプトを作成し、WSH をバックグラウンドで実行させた状態でコマンドラインからスクリプトファイルを実行して、Web サイト上に新しい仮想ディレクトリを作成することができます。さらに、管理者は1つのスクリプトを使って複数の Web サイトや複数の物理的サーバーをターゲットにすることができます。WSH の詳細については、Windows NT 4.0 Option Pack の製品ドキュメントの「About Windows Scripting Host」を参照してください。
IIS Admin オブジェクトと ADSI
IIS とともにインストールされる IIS Admin オブジェクトを使うと、プログラムによる管理がきわめて容易になります。Microsoft の ADSI に基づく IIS Admin オブジェクトは、オートメーションとの互換性を持っており、Active Server Pages (ASP) おける VBScript や JScript、また、Visual Basic や、Java、C++など、オートメーションをサポートする任意の言語でアクセスし、操作することができます。
IIS をインストールすると、サンプルの IIS Admin オブジェクトスクリプトがデフォルトで次のディレクトリにコピーされます。
%windir%\System32\Inetsrv\AdminSamples.
変数 %windir% は、Windows NT Server がインストールされているディレクトリを表します。
注: この記事には、Adsutil.vbs スクリプトの最新バージョンが付属しています。サンプルを使用する前に、現在のバージョンの Adsutil.vbs が上書きされないように別のディレクトリに移動し、新しいバージョンを %windir%\System32\Inetsrv\AdminSamples ディレクトリにダウンロードしてください。
Adsutil.vbsスクリプト ファイルをダウンロードする (90K)。
これらのスクリプトは、IIS のインストール構成の設定、仮想ディレクトリの作成、Web サイトに関する情報の表示(次の節、「スクリプトの実行」の例を参照)、そして IIS の停止、中断、および開始に関する Web サイトのステータスの管理といった操作を行うことができます。各サンプルファイルには、構文と例を示すコメントが付いています。
サンプル スクリプトをそのままの形で実行するだけでなく、サンプルを拡張して独自のカスタマイズスクリプトを作成することもできます。カスタマイズスクリプトでは、Metabase に格納されている設定を変更することで、IIS の構成を管理することができます。Metabase の構造は IIS をインストールした構造に対応しており、Metabase のプロパティ継承機能によって IIS の構成設定を効率的にセットアップすることができます。カスタマイズスクリプトのサンプルは、この記事の「カスタマイズスクリプトの例」にあります。
Metabase の詳細については、Windows NT 4.0 Option Pack の製品ドキュメントの「About the Metabase and IIS Admin Objects」を、また IIS Admin オブジェクトの詳細については、「IIS Admin Objects Reference」を参照してください。
「IIS Admin Objects Reference」は Windows NT 4.0 Option Pack の IIS のオプションとしてインストールされます。リファレンス文書をインストールしていない場合、またはインストールされているかどうかがわからない場合には、次のステップを実行してください。
- コンピュータの CD ドライブに Windows NT 4.0 CD を挿入します。
- タスクバーで、[スタート] - [プログラム] - [Windows NT 4.0 Option Pack] をクリックし、[Windows NT 4.0 Option Pack Setup] を選択します。
- 最初のセットアップ画面が表示されたら、[Next] をクリックします。
- 次の画面で、[Add/Remove] をクリックします。
- [Components] ウィンドウで [Internet Information Server (IIS)] を選択し、[Show Subcomponents]をクリックします。
- [Documentation] を選択し、[Show Subcomponents] をクリックします。[SDK] が選択されている場合には、リファレンスドキュメントはインストールされており、Windows NT 4.0 Option Pack Setup をキャンセルすることができます。[SDK] が選択されていない場合には、次のステップに進みます。
- [SDK] を選択し、[OK] をクリックします。
- [Internet Information Server (IIS)] ダイアログボックスで [OK] をクリックします。
- [Microsoft Windows NT 4.0 Option Pack Setup] ダイアログボックスで [Next] をクリックします。
- [Finish] をクリックします。
「IIS Admin Objects Reference」には、すべてのオブジェクトのリストと、該当するリファレンスページへのリンクが含まれています。各オブジェクトのリファレンスページには、以下の情報があります。
- ADSI と ADSI コンテナの情報
- オブジェクトの ADsPath
- オブジェクトからアクセス可能な Metabase プロパティ
- そのオブジェクトに固有のその他のメソッド
また、ADSIオブジェクトのプロパティと、Metabase のプロパティおよびメソッドのリスト、さらに個々のプロパティとメソッドに関する情報へのリンクがあります。
スクリプトの実行
スクリプトを実行する方法は 2つあります。まず、単にコマンドラインに適切な構文を入力するという方法です。
コマンドラインでスクリプトを実行するには、次のように入力します: Cscript.exeScriptName
グラフィカルユーザーインターフェイスでスクリプトを実行するには、次のように入力します: Wscript.exeScriptName
また、構文をバッチ(.bat)ファイルに入力しておいて、そこからスクリプトを実行するという方法もあります。同じスクリプトを何度も実行する場合には、バッチファイルに入れておくことで、実行するたびにスクリプトを再入力する必要がなくなります。
注: 前の節で言及したように、以下の例は更新版の Adsutil.vbs ファイルをダウンロードしていないと正常に動作しません。
次の例は、デフォルトの Web サイトのルートの現在の設定を表示します。コマンド ラインで次のように入力します。
cscript.exe %windir%\system32\inetsrv\adminsamples\adsutil.vbs enum w3svc/1/root
コマンドラインで他のスクリプトを実行するには、次の構文を入力します: Cscript.exepath\ScriptName
コマンドラインで構文を入力する代わりに、これをバッチ(.bat)ファイルに入力しておいて、そこからスクリプトを実行するという方法もあります。同じスクリプトを何度も実行する場合には、バッチファイルに入れておくことで、実行するたびにスクリプトを再入力する必要がなくなります。
AdminSamples サブディレクトリへのパスを入力したら、Cscript.exe へのフルパスを入力する必要はありません。パスの編集方法については、Windows NT Server のドキュメントを参照してください。
また、Cscript.exe をデフォルトのスクリプティングホストとして登録している場合には、スクリプトの前に Cscript.exe を入力する必要はありません。Cscript.exe の登録方法については、次の節のステップ1を参照してください。
Cscript.exe と Wscript.exe の詳細については、Windows NT 4.0 Option Pack の製品ドキュメントの「Running Scripts Using the Command-Based Scripting Host」と「Running Scripts Using the Windows-Based Scripting Host」を参照してください。
サンプルスクリプトの使用例
以下の例では、ADSI スクリプトを使って、繰り返して実行する必要がある作業を自動化する方法を示します。最初の 2つの例は、サンプルスクリプトを実行する方法を示しています。後の 2つの例は、カスタムスクリプトを作成して各種の管理作業を自動化する方法を示しています。構文の詳しい説明については、Windows NT 4.0 Option Pack の製品ドキュメントを参照してください。
仮想ディレクトリの作成
"Test" という名前の仮想ディレクトリを作成したいとします。このディレクトリは企業のイントラネット上の、"Server2" という名前のコンピュータ上にあります。Server2 は、オフィスから半ブロックほど離れた別のビルの中にあります。しかし、そのビルにまで足を運ぶのではなく、自分のオフィスのコンピュータ (Server1) から変更を加えたいとします。
注: これらのサンプルを使用するためには、Server1 上の Windows NT 環境変数を変更して、管理スクリプトへのパスを追加する必要があります。この変数に変更を加えたくない場合は、デフォルトの位置 %windir%\System32\Inetsrv\AdminSamples からスクリプトを実行することも可能です。
別のサーバー上に仮想ディレクトリを作成するには
コマンド プロンプトを開きます。
管理作業を行うサーバーのコマンドプロンプトで、adsutil と入力し、デフォルトのとおりに、Cscript.exeを登録します。
Cscript.exe を登録したくない場合は(デフォルトで別のスクリプティングホストを実行している場合)、実行するスクリプトの前に Cscript.exe と入力する必要があります。これで、mkwebdir.vbs スクリプトを使って、コマンド プロンプトから新しいディレクトリを簡単に作成することができます。次のように入力してください。
mkwebdir -c Server2 -w "Default Web Site" -v "Test","C:\Test"
このコマンドは、コンピュータ Server2 上で、そのコンピュータのデフォルト IIS Web サイトの下に、Test という名前の Web ディレクトリを作成します。
注: このスクリプトを実行する前に物理ディレクトリを作成する必要はありません。スクリプトは物理ディレクトリと仮想ディレクトリの両方を自動的に作成します。また、仮想ディレクトリの名前は、物理ディレクトリの名前と違っていてもかまいません。
アクセス権の変更
次の例では、仮想ディレクトリ "Test" に対する書き込みアクセス権をユーザーに与えます。
別のサーバー上の仮想ディレクトリに対するアクセス権を変更するには
- Server1 のコマンドプロンプトで、次の行を入力します。
adsutil set w3svc/1/root/test/accesswrite "true"-S:server2
この行は、Server2 上の仮想ディレクトリ Test に対する書き込みアクセス権を追加します。
カスタマイズスクリプトの例
Web サーバーの権限は、ユーザーが特定の FTP と Web サイトにどのようにアクセスし、操作を行えるかを制御します。たとえば、Web サーバーの権限は、Web サイトを訪れたユーザーに対して、個々のページの表示、情報のをアップロード、サイト上でのスクリプトの実行といった操作について制御することができます。Windows NT File System (NTFS) のアクセス権とは異なり、Web サーバーの権限は Web または FTP サイトにアクセスするすべてのユーザーに適用されます。この違いは非常に重要で、NTFS のアクセス権は有効な Windows NT アカウントを持つ特定のユーザーのグループにしか適用されません。
GET/PUTとドット表記
次の例は、仮想ディレクトリ上での権限を 2つの方法で設定するカスタマイズスクリプトを含んでいます。
- GET/PUT表記: 変数を含んでいるスクリプトでは、このタイプを使用します。
- ドット表記: ハードコードされたスクリプトでは、このタイプを使用します。
また、この例では継承がどのように機能するかということも示しています。この例の最初の部分では、GET/PUT 表記は、MyComputer 上のデフォルト Web サイトのルートレベルからの書き込み権限を拒否しています(False に設定)。ルートレベルで権限を設定すると、ルートレベルの下のすべてのディレクトリがその設定を継承します。一方、ドット表記(この例の 2つ目の部分)は、Dir1a という名前の仮想ディレクトリに書き込み権限を与え(True に設定)、これによってルートから継承された設定を上書きしています。
<%
Dim WebServerRootObj
Dim VDirObj
Dim WritePerm
' Open the object for the first virtual Web server root
Set WebServerRootObj = GetObject("IIS://MyComputer/W3SVC/1/Root")
' Deny write access for all directories and files
' for the server (except those already specifically set)
' Using the Put method
WebServerRootObj.Put "AccessWrite", False
' Save the changed value to the metabase
WebServerRootObj.SetInfo
' Get a directory subordinate to the Web server root. Note that this line of code assumes
' Vdir1 has already been created.
Set VDirObj = GetObject("IIS://MyComputer/W3SVC/1/Root/Vdir1/Dir1a")
' Overwrite the inherited value for write access
' using the dot method equivalent to Put
VDirObj.AccessWrite = True
' Save the changed value to the metabase
VDirObj.SetInfo
%>
ADSI ASPスクリプト
次の例は、カスタマイズスクリプトを使って、読み込み、スクリプト、およびディレクトリ参照の権限を作成する方法を示しています。
<%
'''''''''''''''''''''''''''''''''
' ADSI ASP Sample Program
' This is a sample of how to create a virtual directory using ADSI.
'
'''''''''''''''''''''''''''''''''
Option Explicit
On Error Resume Next
'''''''''''''''''''''''
' First, open the path to the Web server you are
' trying to add a virtual directory to.
Dim ServObj
Dim VdirObj
Dim Testpath
Set ServObj = GetObject("IIS://LocalHost/w3svc/1/Root")
if (Err <>0) then
Response.Write "GetObject (""IIS://LocalHost/w3svc/1/Root"") Failed! <br>"
Response.Write "Error! " & Err.Number & "(" & Hex(Err.Number) & "): " & Err.Description & "<br>"
Response.End
end if
'''''''''''''''''''''''
' Second, Create the virtual directory (Vdir) path
Set VdirObj = ServObj.Create("IIsWebVirtualDir", "MyVdir")
VdirObj.SetInfo
if (Err<>0) then
Response.Write "CreateObject (""IIS://LocalHost/w3svc/1/Root/MyVdir"") Failed!<br>"
Response.Write "Error! " & Err.Number & "(" & Hex (Err.Number) & "): " & Err.Description &
"<br>"
Response.End
end if
''''''''''''''''''''''''
' Finally, create a Path variable containing the virtual root path and
' set the permissions to read, script, and directory browsing
VdirObj.AccessRead = True
VdirObj.AccessScript = True
VdirObj.EnableDirBrowsing = True
Testpath = "C:\Temp"
VdirObj.Put "Path", (Testpath)
VdirObj.SetInfo
if (Err<> 0) then
Response.Write "Put (""Path"") Failed!"
Response.Write "Error! " & Err.Number & "(" & Hex (Err.Number) & "): " & Err.Description &
"<br>"
Response.End
end if
Response.Write "VDIR successfully created"
''''''''''''''''''''''''
' The minimum amount necessary to create a virtual directory has now
' been completed. If you need to add more, do it here.
%>
これで、自分のニーズに合わせて独自のスクリプトを作成できるようになりました。スクリプトの詳細については、Windows NT 4.0 Option Pack の製品ドキュメントの「Automating and Customizing your Operations」と、Microsoft Scripting Technologies Webサイト を参照してください。