您好,AS。您知道,有一位脚本专家知道如何制作有很多什锦冰淇淋的核仁巧克力饼,这种饼上布满了融化的果汁软糖、核桃、黑巧克力块和各种美味。也许有人会问,为了促进健康的生活方式,这位脚本专家是否应该制作这种颓废的甜点。让我告诉您吧!脚本专家是行动者,而非思想者:我们要继续制作核仁巧克力饼,让别人去争论我们是否应该这么做。
稍等一下:我们要再切一块巧克力饼。这次只要一小块……
更改用户的主要组也同样如此:我们知道如何去做,但不知道您是否应该去做。根据我们对 Active Directory 的一点了解,只有在处理 Macintosh 客户端或与 POSIX 兼容的应用程序时才会使用主要组,其他情况都可以忽略它。(默认情况下,每个用户的主要组都是 Domain Users。)也就是说,大多数人都可以把本日的专栏归于不必担心的事情,至少今天不用一类。你们大多数人不需更改用户的主要组就可以度过漫长而幸福的一生。(的确,难以置信,但千真万确。)
假设您确实需要更改用户的主要组。这种情况下,下面这个脚本将为您打理一切:
Set objUser = GetObject _
("LDAP://cn=Ken Myer,ou=Finance,dc=fabrikam,dc=com")
Set objGroup = GetObject _
("LDAP://cn=Finance Managers,ou=Finance,dc=fabrikam,dc=com")
objGroup.GetInfoEx Array("primaryGroupToken"), 0
objUser.primaryGroupID = objGroup.primaryGroupToken
objUser.SetInfo
此脚本先绑定到要修改的用户帐户;在此示例脚本中,我们绑定到 fabrikam.com 的 Finance OU 中的 Ken Myer 帐户。然后创建第二个对象引用,此引用指向将成为用户的新主要组 (Finance Managers) 的组。请注意,此脚本假定该用户已经是 Finance Managers 组的成员。如果并非如此,在将 Finance Managers 重新指定为主要组之前,需要将该用户添加到此组。
接下来,我们使用 GetInfoEx 方法,明确检索 Finance Managers 的 primaryGroupToken 属性值。PrimaryGroupToken 是检索某些组的成员名单时使用的计算属性。因为是计算属性(也就是说,该值是动态生成而非按原样保存),我们使用 GetInfoEx 强制执行此计算并返回该值。GetInfoEx 代码如下所示:
objGroup.GetInfoEx Array("primaryGroupToken"), 0
既然谈到这个主题,我们应该指出 GetInfoEx 的一些特点。首先,虽然 GetInfoEx 作为数组存储,但它总是检索数据;因此需要指定一个包含一个项目的数组 (primaryGroupToken)。在调用结尾处附加的 0 没有意义,但却是必需项:如果将其省略或改为其他值,脚本将失败。
坦白讲,我们不清楚原因何在;它就是这样运行的。
剩下的都很容易。将 primaryGroupID 的值设为刚获得的 primaryGroupTaken 值,然后调用 SetInfo 方法将更改写入 Active Directory 中的用户帐户:
objUser.primaryGroupID = objGroup.primaryGroupToken
objUser.SetInfo
这样就大功告成了。正如我们说过的,默认情况下,所有用户的主要组都被指定为 Domain Users。如果要将 Ken Myer 改回此默认值,只需运行此脚本,将主要组改为 Domain Users:
Set objUser = GetObject _
("LDAP://cn=Ken Myer,ou=Finance,dc=fabrikam,dc=com")
Set objGroup = GetObject _
("LDAP://cn=Domain Users,cn=Users,dc=fabrikam,dc=com")
objGroup.GetInfoEx Array("primaryGroupToken"), 0
objUser.primaryGroupID = objGroup.primaryGroupToken
objUser.SetInfo
这就是您需要做的。而我们会再享用一块核仁巧克力饼。这次只要一小块……