グループメンバーシップに基づきスクリプトを実行する

作成日時:2009/03/23


setNetworkDriveFromGroupMembership setNetworkDriveFromGroupMembership.wsf

ActiveDirectory環境下にて、ログオンしたユーザーのグループメンバーシップに基づいて、 スクリプトを実行させるスクリプトです。


ここでは、グループメンバーシップに基づいて、ネットワークドライブを割り当ててます。


プログラムは大きく2つに分かれています。

1つはVBScriptで、引数にグループ名を与えると、 実行したユーザーが引数に与えたグループに所属していると1が返ります。

もう一つはJScriptで、confGroupMembership(GroupName)を実行し、 実際にネットワークドライブの接続を実施します。

Function confGroupMembership(groupName)
	
	set oADs	= CreateObject("ADSystemInfo")
	
	strUser		= oADs.UserName
	
	set oUser	= GetObject("LDAP://"&strUser)
	
	For Each strGroup in oUser.memberOf
		
		set oGroup = GetObject("LDAP://"&strGroup)
		
		if oGroup.CN = groupName Then
			
			confGroupMembership = 1
			
			Exit Function
		End if
	Next
	
	confGroupMembership = 0
	
	Exit Function
	
End Function

実際には、WSFファイルとして作成し、上記VBScriptを下記JScriptから呼び出しています。
ユーザーが引数に与えたグループに属していれば1が返り、そうでなければ0が返ります。



var oNet 			= WScript.CreateObject("WScript.Network");
var oSh 			= WScript.CreateObject("WScript.Shell");
var oFs 			= WScript.CreateObject("Scripting.FileSystemObject");

try
{
	var returnData1		= confGroupMembership("グループ名1");
	var returnData2		= confGroupMembership("グループ名2");
}
catch(e)
{
	var eventLogTitle	= "Network Drive Mapping 結果\n\n";
	var printEventLogs	= eventLogTitle+"ドメインが見つかりません。";
	oSh.LogEvent(4,printEventLogs)
	WScript.Quit();
}

var DriveLetter1 	= "Z:";
var DriveLetter2 	= "Y:";

var UncPath1		= "\\\\Server1\\File";
var UncPath2		= "\\\\Server1\\Share";


var printEventLog	= new Array(2);
printEventLog[0]	= "グループ名1確認出来ません。\n";
printEventLog[1]	= "グループ名2確認出来ません。\n";


//グループ1メンバの場合
if( returnData1 == 1 )
{
	printEventLog[0] = "グループ名1を確認しました\n";
	mappingDriveletter(DriveLetter6,UncPath6);
}
//グループ2メンバの場合
if( returnData2 == 1 )
{
	printEventLog[1] = "グループ名2を確認しました\n";
	mappingDriveletter(DriveLetter2,UncPath2);
}

//	
//	イベントログへの書き込み
//	
var eventLogTitle	= "Network Drive Mapping 結果\n\n";

var printEventLogs	= eventLogTitle+printEventLog[0]+printEventLog[1]+printEventLog[2]+
printEventLog[3]+printEventLog[4]+printEventLog[5];

oSh.LogEvent(4,printEventLogs);


//	
//	ドライブマッピング関数
//	
function mappingDriveletter(DL,DLPath)
{
	try
	{//ドライブレターが使用されているかどうかの確認
		var driveinfo = oNet.EnumNetworkDrives();
		
		for(var i=0;i < driveinfo.length;i +=2)
		{
			//ドライブレターが使用されていた場合は削除
			if(DL == driveinfo.Item(i))
			{
				oNet.RemoveNetworkDrive(DL,true,true);
			}
		}
		//指定したUNCパスへドライブマッピング
		oNet.MapNetworkDrive(DL,DLPath);
		
	}
	catch(e)
	{
		oSh.LogEvent(4,"mappingDriveletterでエラーが発生しました。")
	}
}

function removeDriveLetter(DL){
	var driveinfo = oNet.EnumNetworkDrives();
	
	for(var i=0;i < driveinfo.length;i +=2){
		if(DL == driveinfo.Item(i)){
			oNet.RemoveNetworkDrive(DL,true,true);
		}
	}
}

confGroupMembership(groupName) を利用して、与えられたグループ名にユーザーが所属しているかどうかを判断します。

また、LogEventメソッドを利用し、エラーや情報はイベントログへ記録する形にしています。


ちなみに最後の removeDriveLetter(DL) は、全ネットワークドライブを削除するサブルーチンになります。


inserted by FC2 system