在企业环境中,管理Active Directory(AD)中的用户组是一个常见的任务。最近,将一些分发组从子域迁移到了父域,使用的是Active Directory迁移工具。在这个过程中,允许管理者修改组成员的复选框被清空了。手动打开每个组,检查是否被管理,然后勾选复选框是不现实的,因此开始寻找一种脚本化的方法。通过Arnout van der Vorst的博客中的代码,能够创建这个程序。
这个程序用于设置或清除指定组织单位(OU)中每个组的“管理者可以更新成员”复选框。
例如,要设置复选框,可以使用以下命令:
cscript MngChkBox.vbs ou=Distribution Groups,ou=Users & Groups,ou=Sales 1
要清除复选框,可以使用:
cscript MngChkBox.vbs ou=Distribution Groups,ou=Users & Groups,ou=Sales 0
VBScript代码如下:
' MngChkBox.vbs
' Version 1.2
' By Robert Kirchhof
' Sets or Clears the "Manager can update members" check box for every group in the OU specified.
' Usage MngChkBox <1 or 0>
strCompair = "DC=campus" 'Used to determine if Manager object is in a child domain.
On Error Resume Next
DN = WScript.Arguments(0)
intEnabled = WScript.Arguments(1)
If (Wscript.Arguments.Count < 1) Then
Wscript.Echo "Program Name: MngChkBox.vbs"
WScript.Echo "Version: 1.2"
WScript.Echo "Purpose: Set or Clear the 'Manager can update members' check box for every group in the OU specified."
WScript.Echo "By Robert Kirchhof"
Wscript.Echo "Usage MngChkBox <1 or 0>"
Wscript.Echo "cscript MngChkBox.vbs ou=Distribution Groups,ou=Users & Groups,ou=Sales,dc=MyDomain,dc=com 1 will set the checkbox"
Wscript.Echo "cscript MngChkBox.vbs ou=Distribution Groups,ou=Users & Groups,ou=Sales,dc=MyDomain,dc=com 0 will clear it."
Wscript.Echo "Required argument is missing."
Wscript.Quit(0)
End If
If (Wscript.Arguments.Count < 2) Then
Wscript.Echo "Required argument
代码中包含了一些重要的Active Directory服务接口(ADSI)常量,用于定义访问控制列表(ACL)的权限。例如,ADS_ACETYPE_ACCESS_ALLOWED_OBJECT 表示允许对象类型的访问控制项,而 ADS_RIGHT_DS_WRITE_PROP 表示写入属性的权限。
脚本首先检查是否提供了必要的参数,然后收集域信息,包括域控制器的完全限定域名(FQDN)和域的命名上下文。接着,脚本将组织单位中的所有组加载到一个数组中,并对每个组进行处理。