Share via


嗨,Scripting Guy!

嗨,Scripting Guy!

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

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

今天的問題:如何取得名稱以 G-S-Group 開頭的所有群組?


如何取得名稱以 G-S-Group 開頭的所有群組?

嗨,Scripting Guy!如何取得名稱以 G-S-Group 開頭的所有群組?

-- JD

JP,您好。感恩節前一天,其中一名 Scripting Guy 正在匆匆完成嗨,Scripting Guy!專欄,希望能火速奔往他處。怎麼這麼巧,他剛好挑到一個關於搜尋 Active Directory 問題,解答連睡著都寫得出來 (他大概也無聊的睡著了)。

Active Directory 搜尋專欄這麼容易寫,因為我們稍微作弊:通常只要超出搜尋,我們不會深入說明。Active Directory 搜尋其實很簡單,因為大部分的指令碼都是現成的,不需要因指令碼更改。但是現成指令碼的確很多,礙於版面篇幅無法在這個小專欄多著墨。因此如果讀者有興趣進一步瞭解如何撰寫可以在 Active Directory 搜尋的指令碼,我們通常推薦《指令碼的故事》系列文章中,分兩部分介紹的〈老兄,我的印表機咧?〉(Dude, Where’s My Printer?)。

 

附註:想知道 Scripting Guy 的工作有多麼難嗎?這麼說吧,這一位 Scripting Guy 寫的指令碼只不過參考別人已經寫好的文章,然後叫老媽在廚房忙東忙西,自己悠閒地慶祝感恩節。日子真是不好過啊。


但我們可不是時時犯懶,至少讓您瞧瞧指令碼並說明查詢的運作原理。下面這個指令碼會傳回所有名稱以 如何取得名稱以 G-S-Group 開頭的所有群組?

On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
objCommand.CommandText = _
    "SELECT Name FROM 'LDAP://DC=fabrikam,DC=com' WHERE objectCategory='group' " & _
        "AND Name='G-S-Group*'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("Name").Value
    objRecordSet.MoveNext
Loop

這裡要注意的是可傳回符合條件 (也就是以 G-S-Group 開頭的名稱) 的 SQL 查詢:

"SELECT Name FROM 'LDAP://DC=fabrikam,DC=com' WHERE objectCategory='group' " & _
        "AND Name='G-S-Group*'"

您看,我們得在 Where 子句類指定兩個東西:1) objectCategory 必須等於 group (確保取回的是群組,而不是使用者、OU、印表機等在 Active Directory 上的其他東西),而且 2) Name 屬性必須以 G-S-Group 開頭。要指定後面這項,必須將 Name 的搜尋值設定為查詢對象 G-S-Group,後面加上星號 (*),代表「所有的東西」。這裡要表達的用白話翻譯就是:「給我瞧瞧所有名稱以 G-S-Group 開頭的群組群組,不管後面跟著什麼。」

沒有比這更直接了當的了。

如果要搜尋 Name 以 G-S-Group 結尾的群組,可以把星號放在字串前:

Name='*G-S-Group'

意思是:「給我瞧瞧所有名稱以 G-S-Group 結尾的群組,不管前面跟著什麼。」我們也可以搜尋名稱某處 (任何一個部分) 包含 G-S-Group 字串的群組。方法是在子串前後都加上星號:

Name='*G-S-Group*'

這就是使用指令碼搜尋 Active Directory 的樂趣與功能。

至於我們嘛,某處有香噴噴的火雞等著我們,禮拜一見。


如需詳細資訊

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

 

回到頁首 回到頁首