Как получить “Компанию” и “Отдел” от Active Directory, учитывая объект UserPrincipal?

для числовых вычислений matlab, и подобных ему, не используют i, j

, это зарезервированные константы, но matlab привычка, жалуется.

Мои персональные favs

индекс первое, второе встречное количество

32
задан Soner Gönül 11 January 2013 в 12:39
поделиться

2 ответа

На самом деле вопрос заключался в том, как получить два свойства для .NET 3.5 (System.DirectoryServices.AccountManagement.) UserPrincipal -объект, не получивший userPrincipalName .

Вот как это сделать с помощью метода расширения :

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");
        }

    }
}

Приведенный выше код будет работать в большинстве случаев (то есть он будет работать для стандартных текстовых / строковых однозначных активных Справочные атрибуты). Вам нужно будет изменить код и добавить дополнительный код обработки ошибок для вашей среды.

Вы используете его, добавляя «Класс расширения» в свой проект, а затем вы можете сделать это:

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"));

(Кстати, это будет иметь был отличным применением свойств расширения - жаль, что этого не будет и в C # 4 .)

86
ответ дан 27 November 2019 в 19:55
поделиться

Что-то вроде этого должно сработать, если для пользователя существуют свойства отдела и компании.

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];
    }
}
14
ответ дан 27 November 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: