我正在使用System.DirectoryServices.AccountManagement
在Active Directory上搜索用户。
这是一个简单的例子
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;
}
}
userPrincipal始终为null。如果我将IdentityType.Guid更改为IdentityType.SamAccountName并搜索samaccountname,那么它将正常工作。如果我使用在搜索samAccountName时获得的userPrincipal对象的guid属性,我将再无响应。
有什么想法需要使用GUID获得结果吗?我有一种明显的印象,就是几年前编写此代码时,它过去工作得很好。但是那时我将Windows 2008 R2作为DC,现在有了Windows 2016。
如果我直接访问DirectoryEntry
,请使用
using (DirectoryEntry entry = new DirectoryEntry($"LDAP://{DomainName}/<GUID={objectGuid}>"))
一切正常。因此,这是UserPrincipal.FindIdentity固有的问题。我还尝试将NativeGuid提供给FindByIdentity,但是并没有改变任何事情。