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 Manager) 的群組。請注意,此指令碼假設使用者已經是「Finance Manager」群組的成員了。如果並非如此,那麼您將必須在事前先將使用者新增到群組,才可以將 Finance Manager 重新指定為主要群組。
接下來我們使用 GetInfoEx 分法,明確地為 Finance Manager 擷取 primaryGroupToken 屬性。primaryGroupToken 是一種用來擷取某特定群組成員資格的計算屬性。因為這是計算屬性 (也就是說,此值是即刻產出而非已經儲存的),我們使用 GetInfoEx 來強迫進行計算,並且回傳值。GetInfoEx 指令碼看起來像是這樣:
objGroup.GetInfoEx Array("primaryGroupToken"), 0
既然談到這,我們順便指出 GetInfoEx 的幾個特異之處。首先,GetInfoEx 總是會把資料當成儲存的鎮列來擷取,因此需要指定包含單一項目 (primaryGroupToken) 的陣列。將 0 貼到呼叫的結尾雖沒有意義的,卻是必要的動作:如果漏了這個,或是替換成別的值,這個指令碼就會失敗。
老實說,我們也不知道為什麼,反正它就是這樣運作的。
其餘的就很簡單。我們將 primaryGroupID 的值設定為剛剛擷取的 primaryGroupTaken 值,然後呼叫 SetInfo 方法,把使欲者帳戶內的變更寫入 Active Directory :
objUser.primaryGroupID = objGroup.primaryGroupToken
objUser.SetInfo
這樣應該就可行了。剛才提過,依預設所有使用者的主要群組都已指定為網域使用者。如果您將來想將 Ken Myer 切換回這個預設值,只要執行此指令碼,就能將主要群組變更回網域使用者:
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
這就是您需要做的。至於我們嘛,就要去拿另一塊布朗尼了。這一次也是小小的一塊……。 |