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) は、全ネットワークドライブを削除するサブルーチンになります。