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

问题描述:

给出一个代表Active Directory中用户的GUID,我将如何使用它来使用C#确定用户的“专有名称”?给定一个代表Active Directory中用户的GUID,我将如何使用它来确定专有名称?

GUID在我们的应用程序的早期使用directoryEntry.Guid检索; MSDN Link

+2

由GUID代表SID(http://en.wikipedia.org/wiki/Security_Identifier)?我知道有Guid在各处浮动,但SID经常被误认为是=) – Rob 2010-08-17 13:52:52

+1

由DirectoryEntry.Guid属性指定的GUID http://msdn.microsoft.com/en-us/library/system .directoryservices.directoryentry.guid.aspx – 2010-08-17 13:56:21

正如你清楚一个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工作,但值得一试。

你不知道。 GUID不是以一开始的转换,它完全是随机唯一的。

基本上,你必须有你的SID,然后CALL进入活动目录,并获得具有相同sid的User对象,然后从中读出专有名称。请注意,这不是一个转换,o因此答案是否定的。

如果可以转换回来,SID对于转换目的是无用的,因为我总是可以从您的可分辨名称中生成一个SID,这是在域内公开的。

你可以从DirectoryEntry的直接的distinguishedName:

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进行绑定来解决此问题。