【问题标题】:How do I find a user in Active Directory using their nativeguid in .net?如何使用 .net 中的 nativeguid 在 Active Directory 中找到用户?
【发布时间】:2012-03-12 22:56:36
【问题描述】:

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

【问题讨论】:

    标签: c# .net active-directory directoryservices


    【解决方案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 中与用户和组一起玩变得非常容易!

    【讨论】:

    • 谢谢,我其实很熟悉。但是,默认属性集是有限的。我需要直接访问位于 AD 中的经理、所有直接下属、组成员和照片。这个助手类似乎没有这些属性,我必须扩展该类来获取它们。感觉使用 searcher 弄清楚 GUID 查找发生了什么会更容易!
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多