タグ
  ANSI (1)
  ASP.NET (10)
  Active Directory (55)
  BAT (16)
  Backup (2)
  CSharp (11)
  CentOS (4)
  C言語 (4)
  DNS (4)
  Excel (3)
  FFmpeg (1)
  Fedora (4)
  FreeBSD (6)
  IPv6 (3)
  Java (11)
  JavaScript (8)
  LAN (1)
  Link (4)
  Linux (15)
  Mac (1)
  Mail (2)
  Microsoft (3)
  NIS (1)
  Node.js (6)
  OpenIndiana (1)
  OpenLDAP (2)
  OpenSSL (1)
  OpenSolaris (4)
  PHP (2)
  Perl (2)
  Postfix (1)
  PostgreSQL (2)
  PowerShell (34)
  RFC (3)
  SQL Server (5)
  Solaris (10)
  Ubuntu (9)
  VBScript (73)
  VCpp (2)
  VMware (3)
  Visual Basic (1)
  WMI (17)
  WSF (5)
  WSH (10)
  Windows (19)
  bash (1)
  bind (1)
  iSCSI (1)
  おまけ (3)
  作成中 (8)
  慣用句 (3)
  正規表現 (6)
  運用 (8)
作成 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-2012 UPKEN IPv4