作成 2010.01.08
更新 2010.01.08
更新 2010.01.08
VBScript で特定のグループに所属していたら実行しない
このスクリプトは、環境変数 USERNAME を確認し、Domain Admins に所属していたらプログラムを実行しません。ニッチすぎるwwww
Option Explicit Const SKIPGROUP = "Domain Admins" Const BATCHPATH = "ここにバッチを指定" Dim WshShell Dim strEnvDnsDomain, strEnvUserName Dim baseDN, i, arrItem Dim objConnection, objCommand, strCommandText, objRecordSet Dim strUserDN, objUser, arrGroup, entGroup Dim regEx ' baseDN の取得 Set WshShell = CreateObject("WScript.Shell") strEnvDnsDomain = WshShell.ExpandEnvironmentStrings("%USERDNSDOMAIN%") If Left(strEnvDnsDomain, 1) = "%" Then WScript.Echo "このユーザーはドメインに参加していません" WScript.Quit End If arrItem = Split(strEnvDnsDomain, ".") baseDN = "" For i = 0 to UBound(arrItem) If i = 0 Then baseDN = "DC=" & arrItem(i) Else baseDN = baseDN & ",DC=" & arrItem(i) End If Next ' ユーザーアカウントの取得 strEnvUserName = WshShell.ExpandEnvironmentStrings("%USERNAME%") Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" objCommand.ActiveConnection = objConnection strCommandText = "<LDAP://" & baseDN & ">;" & _ "(&(objectClass=user)(sAMAccountName=" & strEnvUserName & "));" & _ "distinguishedName;" & _ "subtree" objCommand.CommandText = strCommandText Set objRecordSet = objCommand.Execute Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedName") Exit Do objRecordset.MoveNext Loop objConnection.Close Set objCommand = Nothing ' 正規表現の構成 Set regEx = New RegExp regEx.Pattern = "^LDAP://CN=" & SKIPGROUP & "," regEx.Global = False regEx.IgnoreCase = True ' ユーザーの追加所属グループを取得する ' プライマリ グループは検査できないので注意 ' Active Directory のユーザーのプライマリ グループは Domain Users なので問題ないはず。 Set objUser = GetObject("LDAP://" & strUserDN ) Set arrGroup = objUser.Groups For Each entGroup In arrGroup If regEx.Test( entGroup.ADsPath ) Then ' SKIPGROUP に該当すると終了する ' WScript.Echo "DEBUG: Match " & entGroup.ADsPath WScript.Quit End If Next ' プログラムを実行 WshShell.Run Chr(34) & BATCHPATH & Chr(34), 0, True ' WScript.Echo "END"参考