带有IdentityType.Guid的UserPrincipal.FindByIdentity不返回结果

时间:2018-10-29 18:00:10

标签: c# active-directory account-management

我正在使用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,但是并没有改变任何事情。

0 个答案:

没有答案