2009年08月28日


VBScript : このスクリプトが置かれたディレクトリをIISの仮想ディレクトリとして登録

関連する記事
VBScript : IIS7 の 仮想ディレクトリ登録


ブラウザでダウンロード

ダウンロードした iis_vdir.lzh を解凍して、create_vdir.wsf を実行するだけで、
そのディリクトリを仮想ディレクトリとして IIS (既定の Web サイト) に登録します。

.php で、php-cgi.exe を登録します。
Root 仮想ディレクトリに 既に登録されていても上書きします

IIS Admin オブジェクトのリファレンスは こちら( IIsWebServer ) です。
開始・停止したい場合は、IIsWebServer オブジェクトで Start または Stop メソッドを使用します

仮想ディレクトリを作成しているのは、IIsWebVirtualDir オブジェクトです
ScriptMaps は、こちらから取る必要があります( IIsWebServer オブジェクトでは足りませんでした )


<JOB>
<OBJECT id="WshShell"	progid="WScript.Shell" />
<OBJECT id="Fso"		progid="Scripting.FileSystemObject" />

<SCRIPT language="VBScript" src="crun.vbs"></SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
'
' 既存の仮想ディレクトリでも、物理パスを変更可能
' ***********************************************************

' Cscript.exe で実行する
crun

' スクリプトが存在するディレクトリと名前
strCurPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurPath = obj.Path & ""
strName = obj.Name
strPhp = "C:\php-5.2.8-Win32\php-cgi.exe"

' 仮想ディレクトリのパスを「既定の Web サイト」として設定
strVDir = "IIS://localhost/W3SVC/1/Root/" & strName

' 仮想ディレクトリが既に存在するフラグ
bExist = True

on error resume next
' 仮想ディレクトリのオブジェクトを取得
Set IIsWebVDirObj = GetObject(strVDir)
if Err.Number <> 0 then
	' 新規
	Set IIsWebVDirRootObj = GetObject("IIS://localhost/W3SVC/1/Root") 
	Set IIsWebVDirObj = _
		IIsWebVDirRootObj.Create("IIsWebVirtualDir", strName ) 
	' 物理パスを設定
	IIsWebVDirObj.Put "Path", strCurPath
	' 新規仮想ディレクトリ
	bExist = False
else
	Set IIsWebVDirRootObj = GetObject("IIS://localhost/W3SVC/1/Root") 
	' 変更( 物理パスが変わっていても、ここでセットされる )
	IIsWebVDirObj.Put "Path", strCurPath
end if
on error goto 0

' ルートの仮想ディレクトリのマッピングに追加して PHP を使用できるように構成
strMap = ""
bTarget = False
For each value in IIsWebVDirRootObj.ScriptMaps
	strCheck = Ucase((Split( value, "," ))(0))
	if strCheck = ".PHP" then
		strMap = strMap & vbTab & ".php," & strPhp & ",5,GET,POST"
		bTarget = True
	else
		if strMap <> "" then
			strMap = strMap & vbTab
		end if
		strMap = strMap & value
	end if
Next
if Not bTarget then
	strMap = strMap & vbTab & ".php," & strPhp & ",5,GET,POST"
end if
IIsWebVDirObj.Put "ScriptMaps", Split(strMap,vbTab)

' .asp ファイルの実行を許可
IIsWebVDirObj.Put "AccessScript", True

' 実行可能ファイルの実行を許可
IIsWebVDirObj.Put "AccessExecute", True		

' クライアントが要求したリソースに対するアクセス
IIsWebVDirObj.Put "AccessSource", True

IIsWebVDirObj.Put "AccessRead", True			' 読み取り
IIsWebVDirObj.Put "AccessWrite", True			' 書き込み
IIsWebVDirObj.Put "EnableDirBrowsing", True		' ディレクトリの参照

' ログファイルに書き込むかどうか( False で書き込む )
IIsWebVDirObj.Put "DontLog", False

' このリソースに索引を付ける
IIsWebVDirObj.Put "ContentIndexed", False

' インプロセス (0)、アウトプロセス (1)、またはプロセスプール内 (2)
' 2 が 中なので注意
IIsWebVDirObj.AppCreate2 2

' アプリケーションの名前
IIsWebVDirObj.Put "AppFriendlyName", "php実行可能ディレクトリ"

IIsWebVDirObj.Put "AspAllowSessionState", True	' セッション有効
IIsWebVDirObj.Put "AspSessionTimeout", 20		' セッションタイムアウト(分)
IIsWebVDirObj.Put "AspBufferingOn", True		' バッファ処理
IIsWebVDirObj.Put "AspEnableParentPaths", True	' ..\ 表記を使用可能
IIsWebVDirObj.Put "AspScriptTimeout", 90		' スクリプトタイムアウト(秒)

' 既定のドキュメントを読み込むようにする
IIsWebVDirObj.Put "EnableDefaultDoc", True
' 既定のドキュメント
IIsWebVDirObj.Put "DefaultDoc", "index.htm,index.html,index.php"

' ASP ファイルをキャッシュしない
IIsWebVDirObj.Put "AspScriptFileCacheSize", True

' 書き込み
IIsWebVDirObj.SetInfo


if bExist then
	Wscript.Echo "仮想ディレクトリ " & strName & " を変更しました"
else
	Wscript.Echo "仮想ディレクトリ " & strName & " を作成しました"
end if


</SCRIPT>
</JOB>


*************************************************************
■このスクリプトが置かれたディレクトリを
  仮想ディレクトリとして登録
*************************************************************

1) list_iis.wsf で、既定の Web サイトの情報を取得
2) create_vdir.wsf で作成または変更

仮想ディレクトリ名は実際のディレクトリ名が使われますが、
任意の名前にしたい場合は、22 行目の
strName = obj.Name
を
strName = "任意の名前"
に変更して下さい。

※ php の情報は strPhp = "C:\php-5.2.8-Win32\php-cgi.exe" を変更
※ 別のディレクトリで実行すると、その場所で更新になります
※ crun.vbs は外部ライブラリファイル
※ phpinfo.php は、php 実行確認用
※ check.asp は、asp 実行確認用
※ view.htm は、check.asp より #include しています

【チェック】
ディレクトリの権限で、少なくとも Users グループが登録されている必要があります
ファイルの書き込みを行う場合は、Users グループをフルコントロールにすると
問題を回避できると思います

■著作権その他

このプログラムはフリーです。どうぞ自由に御使用ください。
著作権は作者である私が保有しています。
また、本ソフトを運用した結果については、作者は一切責任を
負えせんのでご了承ください。

lightbox
関連する記事
VBScript : IIS7 の 仮想ディレクトリ登録


posted by at 2009-08-28 17:27 | その他 | このブログの読者になる | 更新情報をチェックする