Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Active Directory,枚举用户';s组,COM异常_C#_.net_Active Directory - Fatal编程技术网

C# Active Directory,枚举用户';s组,COM异常

C# Active Directory,枚举用户';s组,COM异常,c#,.net,active-directory,C#,.net,Active Directory,在通过AD.NETAPI枚举当前用户组时,我有时会发现 COMException: Unknown error (0x80005000) 这是我的密码: var userName = Environment.UserName; var context = new PrincipalContext(ContextType.Domain); var user = UserPrincipal.FindByIdentity(context, userN

在通过AD.NETAPI枚举当前用户组时,我有时会发现

COMException: Unknown error (0x80005000)
这是我的密码:

        var userName = Environment.UserName;

        var context = new PrincipalContext(ContextType.Domain);
        var user = UserPrincipal.FindByIdentity(context, userName);

        foreach (var userGroup in user.GetGroups())
        {
            Console.WriteLine(userGroup.Name);
        }

有什么问题吗?我以为每个用户都可以检索他的组列表?这似乎是一种奇怪的行为,有时它可以像这样复制:当在“userA”PC上运行时,它崩溃了,但它正在成功地枚举其他“userB”组(在“userA”下)

0x80005000=E_ADS_BAD_PATHNAME所以您在某处提供了一个无效的adspath,可能您必须添加LDAP://前缀,或者它要这样做两次?设置断点并检查值

编辑:
AdsPath应该是一个类似“LDAP://CN=administrator,CN=Users,DC=contoso,DC=com”的值,您似乎有一个格式不正确的路径。

<0x80005000=E\u ADS\u BAD\u PATHNAME所以您在某个地方提供了一个无效的AdsPath,也许您必须添加LDAP://prefix,或者它要这样做两次?设置断点并检查值

编辑: AdsPath应该是一个类似“LDAP://CN=administrator,CN=Users,DC=contoso,DC=com”的值,您似乎有一个格式不正确的路径。

尝试使用

var context = new PrincipalContext(ContextType.Domain, "yourcompany.com", "DC=yourcompany,DC=com", ContextOptions.Negotiate);
当ContextOption设置为Negotiate时,客户端通过Kerberos或NTLM进行身份验证,因此即使未提供用户名和密码,帐户管理API也会通过调用线程的安全上下文绑定到对象。

尝试使用

var context = new PrincipalContext(ContextType.Domain, "yourcompany.com", "DC=yourcompany,DC=com", ContextOptions.Negotiate);

当ContextOption设置为Negotiate时,客户端通过使用Kerberos或NTLM进行身份验证,因此即使未提供用户名和密码,帐户管理API也会使用调用线程的安全上下文绑定到对象。

我也遇到了同样的问题,我在创建
PrincipalContext
时通过提供域名解决了这个问题:

var domain = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
var user = UserPrincipal.FindByIdentity(domain, Environment.UserName);

我也有同样的问题,我在创建
PrincipalContext
时通过提供域名解决了这个问题:

var domain = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
var user = UserPrincipal.FindByIdentity(domain, Environment.UserName);

在Null上调用某些内容将导致NullReferenceException,而不是COMException,是的,用户不是Null,我简化了代码(删除了错误检查),顺便说一句,在Microsoft支持上发现了一些内容,似乎是已知的问题,我将发布链接在Null上调用某些内容将导致NullReferenceException,而不是COMException,是的,用户不是Null,我简化了代码(删除了错误检查)顺便说一句,在Microsoft支持上发现了一些东西,似乎是已知的问题,我将发布链接。您可以提供更多详细信息,检查什么路径,什么值吗?((System.DirectoryServices.AccountManagement.Principal)(user))。DifferentizedName等于'CN=MyAccountName,OU=MyCompany用户,DC=MyCompany,DC=local’并且它可以工作,在其他人的PC上它没有-发现这一点,但似乎它也不工作。您可以提供更多详细信息,什么路径,要检查什么值吗?((System.DirectoryServices.AccountManagement.Principal)(user))。DifferentizedName等于'CN=MyAccountName,OU=MyCompany Users,DC=MyCompany,DC=local',它可以工作,在其他人的电脑上,它没有找到这个,但似乎它也不工作