嗨,Scripting Guy!

嗨,Scripting Guy!

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

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

今天的問題:如何從本機系統管理員群組移除群組?


如何從本機系統管理員群組移除群組?

嗨,Scripting Guy!如何從本機系統管理員群組移除群組?

-- SB

SB,您好。有一個 Scripting Guy 隱約記得一系列很老的電視節目,叫做《Branded》,其中的英雄 (由 Chuck Connors 飾演) 被人指控是懦夫而被開除軍藉,強迫退役,逐出美國騎兵團。所有 Scripting Guy 成員幾乎都記得影片開場的情景,他們從這名騎兵隊的制服上扯下徽章,將他的佩劍折成兩半,然後讓他羞辱地以行軍步伐走出堡壘。

您會問,我們幹嘛要提這檔子事?其實也沒什麼特別的理由,只是覺得如果從本機系統管理員群組移除使用者或群組時,隨時都能舉行類似的儀式,一定很酷!不過時候未到,您可以透過類似下列的指令碼,從本機系統管理員群組移除一個群組 (在本範例中移除的是 Active Directory 群組):

strComputer = "atl-fs-01"
Set objAdmins = GetObject("WinNT://" & strComputer & "/Administrators")
Set objGroup = GetObject("WinNT://fabrikam/finance")
 
objAdmins.Remove(objGroup.ADsPath)

是啊!很簡單,對不對?這段指令碼一開始先將電腦名稱 (在本範例中是 atl-fs-01) 指定給變數 strComputer。然後使用下列這行程式碼,繫結至該電腦上的本機系統管理員群組:

Set objAdmins = GetObject("WinNT://" & strComputer & "/Administrators")

一旦有了參考系統管理員群組的物件以後,下一步就是建立第二個物件參考,這是要移除群組的參考。下面的程式碼就是執行這個步驟:

Set objGroup = GetObject("WinNT://fabrikam/finance")

請注意,我們在參考群組帳戶時,是使用舊式的 Windows NT 命名慣例:fabrikam/finance。原因何在?其實很簡單:若要使用本機使用者和群組,必須使用 WinNT 提供者。WinNT 提供者不懂 Active Directory 的行話,分不清如下物件路徑的頭或尾:

cn=Finance Users, ou=Finance, dc=fabrikam, dc=com

因此,我們必須回頭使用舊式的帳戶名稱:網域名稱/登入名稱。可是沒關係:幸虧 Active Directory 也能夠了解這種命名慣例。當我們要求 fabrikam/finance 帳戶時,Active Directory 完全了解我們指的是什麼。

 

附註:下面這個問題以前也曾有人提出,但值得再重複說明一次。是的,您可以使用 WinNT 提供者,存取 Active Directory 中的物件,而且沒有錯,這種物件路徑確實也比較簡單。但千萬別因此而大意冒險,只有在絕對必要時,才使用 WinNT 提供者。原因何在?例如,LDAP 提供者一般配合 Active Directory 所使用的使用者帳戶可支援 200 個以上的屬性,而 WinNT 提供者僅支援大約 20 個左右。LDAP 提供者功能更強,也更實用。


有了該群組的物件參考以後,只需要呼叫 Remove 方法,就能將該群組從本機系統管理員群組移除:

objAdmins.Remove(objGroup.ADsPath)

我們還是覺得能夠從某人襯衫上扯掉他口袋上的護套,然後將他的訂書機頂著膝蓋折斷,這樣會比較酷,不過指令碼也行啦!

當然,您要移除的群組也可能不是 Active Directory 群組,而可能是本機群組。這樣會造成問題嗎?其實絕對不會造成問題,而會稍微更容易一點。只要直接繫結至本機電腦上的群組帳戶,然後讓它執行下列指令碼即可:

strComputer = "atl-fs-01"

Set objAdmins = GetObject("WinNT://" & strComputer & "/Administrators") Set objGroup = GetObject("WinNT://finance")

objAdmins.Remove(objGroup.ADsPath)

順帶一提,用來從一個群組移除另一個群組的程序與用來從群組中移除使用者的程序完全一樣:先繫結至目標群組 (在本範例中是本機系統管理員群組),繫結至要移除的物件 (不管是群組或使用者都可以),然後再呼叫 Remove 方法,傳遞單一參數 ADsPath 來移除帳戶。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首