2012-03-19 90 views
0

在PowerShell中,我已經知道如何使用DirectoryEntry和DirectorySearcher獲取某個OU中的用戶列表。這種方法的結果大部分是我在AD中查找的內容,但通過使用WMI查詢Win32_UserAccount來獲取相同的信息似乎更容易。我更喜歡這個類的屬性,並且SID已經是正確的字符串格式(在第一種方法中,它需要從一個十六進制字節數組轉換爲字符串)。如何通過OU過濾Win32_UserAccount結果

我在使用Win32_UserAccount時遇到的問題是我無法找到一種方法來通過OU進行過濾。我可以通過域名和名稱成功過濾,並且已經嘗試了幾次WQL猜測,但似乎無法找到OU過濾器的任何語法。我的大多數嘗試都會導致「無效查詢」。下面是一個可行的查詢的例子:

$user = gwmi Win32_UserAccount -filter "name='somebody' AND domain='mydomain'" 

如果沒有辦法通過OU來過濾這個話,我會回去使用的DirectoryEntry /的DirectorySearcher。

回答

1

鑑於Win32_Account類沒有與LDAP相關的屬性,所以我認爲你很不幸運。

您當然可以使用它來獲取所需格式的SID,除了目錄搜索以獲取LDAP相關數據。

+0

這是我即將做,從的DirectorySearcher通過OU得到用戶的列表,並他們使用Win32_UserAccount(從Win32_Account繼承其他屬性)並從那裏獲取其餘的信息。對於WMI來說,這將是一個簡單的單一調用,並循環遍歷結果,但是如果OU屬性不可用,那麼我想它不能被它過濾。 – Bratch 2012-03-20 17:17:56

1

您是否熟悉Quest的免費AD cmdlet?

http://www.quest.com/powershell/activeroles-server.aspx

可以過濾基於OU的用戶和獲得各種格式的SID:

PS> Get-QADUser SizeLimit 0 -SearchRoot <OU_DistinguishedName>' | fl *sid* 

objectSid : 0105000000000005150000006753F33372134F3FF673476FF4023001 
Sid  : S-1-5-21-54781788-1045369324-1866953526-501 
(...) 
+0

我不認爲這將部署在服務器上有任何附加擴展。它的工作原理和我一樣,如果我堅持使用LDAP調用,我甚至會找到一個將SID轉換爲字符串格式的函數。 | fl *很適合獲取對象屬性。 – Bratch 2012-03-20 18:11:01

+0

您不必將其安裝在服務器上,您的管理工作站即可執行此操作。 – 2012-03-21 15:30:02

+0

我在測試時從我的工作站運行它們,但腳本已部署並計劃從另一臺計算機運行。我會將鏈接轉發給該機器的管理員。我的腳本沒有工作,但他可能對cmdlet可以執行的其他操作感興趣。 – Bratch 2012-03-21 16:30:21