给定一个代表Active Directory中用户的GUID,我将如何使用它来确定专有名称?
问题描述:
给出一个代表Active Directory中用户的GUID,我将如何使用它来使用C#确定用户的“专有名称”?给定一个代表Active Directory中用户的GUID,我将如何使用它来确定专有名称?
GUID在我们的应用程序的早期使用directoryEntry.Guid检索; MSDN Link
答
正如你清楚一个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进行绑定来解决此问题。
由GUID代表SID(http://en.wikipedia.org/wiki/Security_Identifier)?我知道有Guid在各处浮动,但SID经常被误认为是=) – Rob 2010-08-17 13:52:52
由DirectoryEntry.Guid属性指定的GUID http://msdn.microsoft.com/en-us/library/system .directoryservices.directoryentry.guid.aspx – 2010-08-17 13:56:21