作成 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"
参考

VBScript で特定のグループに所属していたら実行しない2


©2004-2017 UPKEN IPv4