Как найти пользователя в Active Directory, используя его nativeguid в .net? - PullRequest
1 голос
/ 13 марта 2012

Я столкнулся с проблемой, когда запуск DirectorySearcher не всегда возвращает результат успешно.Например, я отправлю GUID моего менеджера, используя следующий метод для преобразования строки (NativeGuid):

public static string Guid2OctetString(string objectGuid)
{
    System.Guid guid = new Guid(objectGuid);
    byte[] byteGuid = guid.ToByteArray();
    string queryGuid = "";
    foreach (byte b in byteGuid)
    {
        queryGuid += @"\" + b.ToString("x2");
    }
    return queryGuid;
}

Это предположительно преобразует строку guid во что-то, что используется Active Directory.Когда я запускаю NativeGuid моего менеджера через это, я получаю результат.Но затем на следующем шаге приложения я таким же образом запускаю один из руководств directReports, но не получаю результатов.Пользователь существует, и я могу получить запись, если потяну DirectoryEntry, но мне не нужна полная запись, так как она слишком медленная для обработки.Я должен быть в состоянии сузить поля, используя DirectorySearcher, чтобы ускорить эту вещь.Есть идеи, почему я получаю гусиное яйцо при поиске в каталоге у некоторых пользователей, но не у других?

1 Ответ

1 голос
/ 13 марта 2012

Если вы используете .NET 3.5 и выше, вы должны проверить пространство имен System.DirectoryServices.AccountManagement (S.DS.AM). Читайте все об этом здесь:

По сути, вы можете определить контекст домена и легко находить пользователей и / или группы в AD:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.Guid, YourGuid.ToString());

if(user != null)
{
   // do something here....     
}

Новый S.DS.AM позволяет очень легко играть с пользователями и группами в AD!

...