代码之家  ›  专栏  ›  技术社区  ›  John Sibly

给定一个代表Active Directory中用户的GUID,我将如何使用它来确定可分辨名称?

  •  4
  • John Sibly  · 技术社区  · 14 年前

    给定一个代表Active Directory中用户的guid,我将如何使用该guid确定用户的“可分辨名称”,使用c_?

    guid在我们的应用程序中使用directoryEntry.guid更早地检索到; MSDN Link

    3 回复  |  直到 13 年前
        1
  •  10
  •   Rob    14 年前

    当您清楚地表明您要搜索的是GUID时,请尝试以下操作:

    using System;
    using System.DirectoryServices.AccountManagement;
    
    public static class DomainHelpers
    {    
        public string GetDistinguishedName(string domain, string guid)
        {
            var context = new PrincipalContext(ContextType.Domain, domain); 
            var userPrincipal  = UserPrincipal.FindByIdentity(context, IdentityType.Guid, guid);
    
            return userPrincipal.DistinguishedName;
        }
    }
    

    我把这个和 IdentityType.Name 所以不能肯定它会起作用 IdentityType.Guid 但值得一试。

        2
  •  3
  •   wanion Chad Miller    13 年前

    您可以直接从DirectoryEntry中获取区分名称:

    public string GetDN(DirectoryEntry de)  
    {  
        return de.Properties["distinguishedName"].Value.ToString();  
    }  
    

    如果你还需要的话 bind via GUID 你也可以这样做:

    public string GetDNviaGUID(Guid queryGuid)  
    {  
        DirectoryEntry de = new DirectoryEntry("LDAP://<GUID=" + queryGuid + ">");  
        return de.Properties["distinguishedName"].Value.ToString();
    }
    

    通过guid或sid绑定时,以下属性和方法不起作用:adspath、name、parent、getobject、create、delete、copyhere、movehere。

    您可以通过guid检索对象,获取其可分辨名称,然后使用dn绑定来绕过这个问题。

        3
  •  -2
  •   TomTom    14 年前

    你没有。guid不是要开始的转换,它是完全随机唯一的。

    基本上,您必须拥有自己的sid,然后调用活动的diretory并获取具有相同sid的用户对象,然后从中读取可分辨的名称。注意,这不是转换,所以答案是否定的。

    如果可以进行反向转换,那么出于转换的目的,SID将是无用的,因为我总是可以从您的可分辨名称生成一个SID,该名称在域中是public。