Const ADS_GROUP_TYPE_GLOBAL_GROUP = &H2
Set objOU = GetObject("LDAP://OU=Finance, dc=fabrikam, dc=com")
Set objOldGroup = GetObject("LDAP://CN=Finance Managers, ou=Finance, dc=fabrikam, dc=com")
Set objNewGroup = objOU.Create("Group", "Finance Department")
objNewGroup.sAMAccountName = "financedept"
objNewGroup.groupType = ADS_GROUP_TYPE_GLOBAL_GROUP
objNewGroup.Set Info
For Each objUser in objOldGroup.Member
objNewGroup.Add "LDAP://" & objUser
Next
問題是,怎麼進行?我們首先定義一個叫做 ADS_GROUP_TYPE_GLOBAL_GROUP 的常數,將值設為 &H2;稍後再利用這個常數,使新群組成為全域安全性群組。
接下來,建立兩個不同物件的物件參考。物件參考 objOU 會繫結到 Active Directory 中的 Finance OU;這是容納新安全性群組的 OU。而 objOldGroup 則是繫結到 Active Directory 中的 Finance Managers 群組;如我們所知,這個群組擁有一份我們希望加入新群組中的使用者清單。
我們暫且先避開主題,另外建立一個名叫 Finance Department 的新群組;下面這一段程式碼就是要執行這個動作:
Set objNewGroup = objOU.Create("Group", "Finance Department")
objNewGroup.sAMAccountName = "financedept"
objNewGroup.groupType = ADS_GROUP_TYPE_GLOBAL_GROUP
objNewGroup.SetInfo
過程和原因我們就不加詳述了;如需詳細資訊,請參閱《Microsoft Windows 2000 Scripting Guide》(英文) 的相關部分。
現在有了一個內含多個成員的現有群組 (Finance Managers),以及一個不含任何成員的新群組 (Finance Department),不過我們可以做些變動: 只要抓取 Finance Managers 的成員資格,將它複製到 Finance Department 就可以了。信不信由你,這個動作只需三行程式碼就搞定了:
For Each objUser in objOldGroup.Member
objNewGroup.Add "LDAP://" & objUser
Next
結果群組的 Member 屬性有該群組所有成員的集合,我們可以使用簡單的 For Each 迴圈,來循環處理 Member 屬性的值,然後傳回每個群組成員的 distinguishedName (DN) 屬性。
注意:distinguishedName 屬性如下所示:
CN=Ken Myer, ou=Finance, dc=fabrikam, dc=com
還好,我們只需要使用者的 ADsPath,就可以把該使用者加入群組了。ADsPath 就是 ADSI 提供者 (在本例為 LDAP://) 和使用者 DN 的組合。到目前為止,我們已有下面這兩項:ADSI 提供者 (如果是使用 Active Directory,則必須是 LDAP://) 和使用者 DN。在這行程式碼中,我們把使用者加入新群組中,將 ADSI 提供者和使用者 DN 的組合,作為 Add 方法的唯一參數。
objNewGroup.Add "LDAP://" & objUser
接著就是對 Finance Managers 群組的每個成員,重複執行上述步驟,抓取其 distinguishedName 屬性的值,然後利用該值將使用者 (或電腦、群組等) 加入 Finance Department 群組中。結論是:儘管沒有 Copy 命令,還是可將群組的成員清單複製到另一個群組,不知道藉由 VBScript 人工複製的日子會不會就成歷史?(我這麼說好了:一開始我們也只有一個 Scripting Guy 為您服務嘛…)。 |