如何在.net中使用其nativeguid在Active Directory中查找用户?

时间:2012-03-12 22:56:37

标签: c# .net active-directory directoryservices

我遇到的问题是运行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的Guids但没有得到任何结果。用户确实存在,如果我拉DirectoryEntry,我可以获得该条目,但我不想要完整的条目,因为它太慢而无法处理。我需要能够使用DirectorySearcher来缩小字段以加快这个速度。任何想法为什么我会在一些用户的目录搜索上获得鹅卵而不是其他用户?

1 个答案:

答案 0 :(得分:1)

如果您使用的是.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中的用户和群组一起玩!