我在Active Directory中爲不同的用戶組設置了不同的OU,我想要使用C#獲取特定OU的所有用戶。在特定OU Active Directory中搜索用戶
目前我有這個過濾器,但它返回的所有用戶的所有OU
(&(objectClass=User)(objectCategory=Person))
請幫我在使用LDAP
感謝
我在Active Directory中爲不同的用戶組設置了不同的OU,我想要使用C#獲取特定OU的所有用戶。在特定OU Active Directory中搜索用戶
目前我有這個過濾器,但它返回的所有用戶的所有OU
(&(objectClass=User)(objectCategory=Person))
請幫我在使用LDAP
感謝
您可以使用PrincipalSearcher
找出特定用戶的用戶和一個「按實例查詢」的委託人來做您的搜索:
// LDAP string to define your OU
string ou = "OU=Sales,DC=YourCompany,DC=com";
// set up a "PrincipalContext" for that OU
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "Yourcompany.com", ou))
{
// define the "query-by-example" user (or group, or computer) for your search
UserPrincipal qbeUser = new UserPrincipal(ctx);
// set whatever attributes you want to limit your search for, e.g. Name, etc.
qbeUser.Surname = "Smith";
// define a searcher for that context and that query-by-example
using (PrincipalSearcher searcher = new PrincipalSearcher(qbeUser))
{
foreach (Principal p in searcher.FindAll())
{
// Convert the "generic" Principal to a UserPrincipal
UserPrincipal user = p as UserPrincipal;
if (user != null)
{
// do something with your found user....
}
}
}
如果你還沒有 - 絕對閱讀MSDN文章Managing Directory Security Principals in the .NET Framework 3.5,它很好地展示瞭如何充分利用System.DirectoryServices.AccountManagement
中的新功能。或者查看MSDN documentation on the System.DirectoryServices.AccountManagement命名空間。
當然,這取決於你的需要,你可能想在你創建一個「查詢通過例如」用戶主體指定其他屬性:
DisplayName
(通常爲:第一名稱+空格+姓氏)SAM Account Name
- 你的Windows/AD帳戶名User Principal Name
- 你的 「[email protected]」 樣式名可以SPE將UserPrincipal
上的任何屬性都作爲屬性,並將它們用作您的PrincipalSearcher
的「查詢範例」。
一種選擇是當你創建DirectoryEntry
對象剛纔設置的組織單位(OU):
using (var entry = new DirectoryEntry($"LDAP://OU={unit},OU=Accounts,DC={domain},DC=local"))
{
// Setup your search within the directory
var search = new DirectorySearcher(entry)
{
Filter = "(&(objectCategory=person)(objectClass=user)(memberOf=*))"
};
// Set the properties to be returned
search.PropertiesToLoad.Add("SamAccountName");
// Get the results
var results = search.FindAll();
// TODO Process the results as needed...
}
謝謝您的答覆。 但我必須使用ldap來做到這一點 –
@MuhammadTaqi:我的回覆***是使用LDAP的***! –