Возможно ли это? Пример кода был бы приятным.Как получить «Компания» и «Отдел» из Active Directory с помощью объекта UserPrincipal?
ответ
На самом деле, вопрос заключается в том, чтобы получить два свойства для .NET 3.5 (System.DirectoryServices.AccountManagement.)UserPrincipal
не -объект дали userPrincipalName
.
Вот как сделать это с extension method:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
namespace MyExtensions
{
public static class AccountManagementExtensions
{
public static String GetProperty(this Principal principal, String property)
{
DirectoryEntry directoryEntry = principal.GetUnderlyingObject() as DirectoryEntry;
if (directoryEntry.Properties.Contains(property))
return directoryEntry.Properties[property].Value.ToString();
else
return String.Empty;
}
public static String GetCompany(this Principal principal)
{
return principal.GetProperty("company");
}
public static String GetDepartment(this Principal principal)
{
return principal.GetProperty("department");
}
}
}
Приведенный выше код будет работать в большинстве случаев (то есть он будет работать для стандартного текста/String Single-Value Active Directory атрибуты). Вам нужно будет изменить код и добавить код обработки ошибок для вашей среды.
Вы можете использовать его добавить «Extension Class» для вашего проекта, а затем вы можете сделать это:
PrincipalContext domain = new PrincipalContext(ContextType.Domain);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(domain, "youruser");
Console.WriteLine(userPrincipal.GetCompany());
Console.WriteLine(userPrincipal.GetDepartment());
Console.WriteLine(userPrincipal.GetProperty("userAccountControl"));
(BTW, это была бы большая польза для свойства Extension - too bad it won't be in C# 4 either.)
Что-то вроде этого должно делать это, если для пользователя существуют свойства отдела и компании.
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://dnsNameOfYourDC.my.company.com";
DirectorySearcher deSearch = new DirectorySearcher(de);
deSearch.PropertiesToLoad.Add("department");
deSearch.PropertiesToLoad.Add("company");
deSearch.SearchScope = SearchScope.Subtree;
deSearch.Filter = "(&(objectClass=User)(userPrincipalName=MyPrincipalName))";
SearchResultCollection results = deSearch.FindAll():
foreach (SearchResult result in results)
{
ResultPropertyCollection props = result.Properties;
foreach (string propName in props.PropertyNames)
{
//Loop properties and pick out company,department
string tmp = (string)props[propName][0];
}
}
один маленький nitpick: в LDAP-фильтре я бы предпочел использовать «objectCategory» вместо objectClass. Зачем? Объектная категория является однозначной и индексируется в Active Directory, поэтому поисковик быстрее использует objectCategory. –
Фактически атрибут objectClass индексируется по умолчанию, если вы находитесь на Windows Server 2008. Это не так, если вы на Windows Server 2000 или 2003. –
Это отличное решение и работает так, спасибо. Я должен был отметить один ниже, как правильный, хотя я имею дело с System.DirectoryServices.AccountManagement.UserPrincipal. – wgpubs
- 1. Active Directory, LDAP UserPrincipal
- 2. Active Directory UserPrincipal issue
- 3. Как получить объект UserPrincipal для менеджера из объекта UserPrincipal сотрудника
- 4. Как получить атрибуты Active Directory не представлены классом UserPrincipal
- 5. Получение EmailAddress NULL из Active Directory (AccountManagement UserPrincipal)
- 6. Как создать контакт в Active Directory, расширив класс UserPrincipal?
- 7. Получить nETBIOSName из объекта UserPrincipal
- 8. Доступ к информации менеджера из Active Directory
- 9. Получить список ролей, домен с помощью Active Directory
- 10. Как получить список пользователей из Active Directory с помощью C#?
- 11. Как получить удаленные объекты из Active Directory с помощью Ruby?
- 12. Как получить имя учетной записи из UserPrincipal?
- 13. Получить имя ПК с помощью Active Directory
- 14. Как получить thumbnailФото из Active Directory? PHP
- 15. Аутентификация Active Directory Active Directory и WCF
- 16. Получить электронное письмо с сайта Active Directory
- 17. Получение всех пользователей из Active Directory PrincipalContext
- 18. Active Directory
- 19. Как получить электронную почту из Active Directory при подключении с помощью server.xml от Tomcat 6
- 20. Получить имя пользователя Active Directory Active Directory от Django
- 21. Заполнение Active Directory с помощью SSIS
- 22. Как получить всех пользователей из Active Directory?
- 23. Как получить имя SAMAccountName из Active Directory
- 24. Получить информацию о диспетчере пользователя из Active Directory
- 25. Получить организационное подразделение из Active Directory с помощью C#
- 26. Получить пользователей Active Directory по списку guid
- 27. Получить группы из Active Directory с помощью C#
- 28. Пользователь (ы) информация из Active Directory
- 29. Как выбрать расширенные свойства объекта [Active Directory]?
- 30. Чтение удаленных пользователей из Active directory
Также вы можете ознакомиться с Основными расширениями (http://msdn.microsoft.com/en-us/library/bb552835.aspx), чтобы создать пользовательские принципы, соответствующие требуемым вам свойствам. –
как вы собираетесь делать метод «Установить» и сохранить значение? – JustinStolle
@PerNoalt Спасибо за код, но не существует более короткого способа напрямую получить свойство, например: department из UserPrincipal, без использования расширений? – Rama