Получить всех пользователей и контакты из группы в Active Directory
Я искал решение для получения пользователей и контактов из группы в Active Directory, но не могу найти.
Я понимаю, что не могу получить контакты так же, как пользователи, потому что они не являются участниками безопасности?
Я использую этот код для получения всех пользователей в моей группе. Можно ли расширить его для получения имени и номера мобильного телефона из контактов? Или мне нужно написать что-то новое?
var context = new PrincipalContext(ContextType.Domain, "MY_DOMAIN");
using (var searcher = new PrincipalSearcher())
{
var groupName = "MY_GROUP";
var sp = new GroupPrincipal(context, groupName);
searcher.QueryFilter = sp;
var group = searcher.FindOne() as GroupPrincipal;
if (group == null)
Console.WriteLine("Invalid Group Name: {0}", groupName);
foreach (var f in group.GetMembers())
{
var principal = f as UserPrincipal;
if (principal == null || string.IsNullOrEmpty(principal.Name))
continue;
DirectoryEntry entry = (principal.GetUnderlyingObject() as DirectoryEntry);
DirectorySearcher entrySearch = new DirectorySearcher(entry);
entrySearch.PropertiesToLoad.Add("mobile");
entrySearch.PropertiesToLoad.Add("sAMAccountName");
entrySearch.PropertiesToLoad.Add("name");
SearchResultCollection results = entrySearch.FindAll();
ResultPropertyCollection rpc = results[0].Properties;
foreach (string rp in rpc.PropertyNames)
{
if (rp == "mobile")
Console.WriteLine(rpc["mobile"][0].ToString());
if(rp == "sAMAccountName")
Console.WriteLine(rpc["sAMAccountName"][0].ToString());
}
1 ответ
Вы не можете использовать System.DirectoryServices.AccountManagement
пространство имен для запроса контактной информации из Active Directory, поскольку, как вы указали, они не являются принципами безопасности. Вам нужно будет прочитать и разобрать member
собственность группы прямо из группы DirectoryEntry
, Это будет список отличительных имен всех объектов, которые являются членами группы. Из этого нельзя узнать, что это за объект, так что вам нужно будет запросить AD для каждого, чтобы узнать.
У вас есть весь код, необходимый для достижения этой цели, в том, что вы опубликовали, просто добавьте member
свойство в список загрузки, а затем зациклить, хотя он загружает новый DirectoryEntry
объекты. objectClass
собственность скажет вам, если это пользователь, группа или контакт.