Share via


嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎使用 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

還有,別忘了瞧瞧全新經過改良的《嗨,Scripting Guy!過往文件》。

今天的問題:要如何變更使用者的主要群組呢?


要如何變更使用者的主要群組呢??

嗨,Scripting Guy!我該如何變更使用者的主要群組呢?

-- AS

AS,您好。這裡有位 Scripting Guy 知道怎麼作超好吃的巧克力碎片布朗尼,上面鋪著融化的棉花糖、核桃、黑巧克力碎片等好料。有人難免作此想:麼墮落的甜點,對身體不太好吧? 但是您知道嗎?Scripting Guy 是行動派,而非思想派:我們還是全部繼續做布朗尼,至於該不該做,就留待世人去討論吧。

等等歐,我們得要去切另一塊布朗尼了。這一次只要小小的一塊……。

變更使用者主要群組也是一樣的道理,我們知道如何做,但是我們不知道您是否應該這樣做。根據我們對 Active Directory 的粗淺了解,只有在您必須使用 Macintosh 用戶端或是 POSIX 相容應用程式時才會用到主要群組,其實您不用去改動它。(依預設,每個使用者的主要群組為網域使用者)。對大部分的人而言,今天的專欄或許可以歸類到不是急迫的事情。大部分的人不用變更使用者主要群組,仍然可以過著幸福快樂的日子。(沒蓋您,真的)。

但是假設您真的需要變更使用者主要群組,以下是可以幫您處理好一切的指令碼:

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

這就是您需要做的。至於我們嘛,就要去拿另一塊布朗尼了。這一次也是小小的一塊……。


如需詳細資訊

請參閱嗨,Scripting Guy! - 過往文件

 

回到頁首 回到頁首