Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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# 4.0 “集体投掷”;System.Runtime.InteropServices.COMException(0x8007200A):指定的目录服务属性或值不存在;_C# 4.0_Active Directory_Account Management_Groupprincipal - Fatal编程技术网

C# 4.0 “集体投掷”;System.Runtime.InteropServices.COMException(0x8007200A):指定的目录服务属性或值不存在;

C# 4.0 “集体投掷”;System.Runtime.InteropServices.COMException(0x8007200A):指定的目录服务属性或值不存在;,c#-4.0,active-directory,account-management,groupprincipal,C# 4.0,Active Directory,Account Management,Groupprincipal,我正在使用System.DirectoryServices.AccountManagement查询用户,然后查找该用户的组 var _principalContext = new PrincipalContext(ContextType.Domain, domainAddress, adContainer, adQueryAccount, adQueryAccountPassword); var user = UserPrincipal.FindByIdentity(_principalCont

我正在使用
System.DirectoryServices.AccountManagement
查询用户,然后查找该用户的组

var _principalContext = new PrincipalContext(ContextType.Domain, domainAddress, adContainer, adQueryAccount, adQueryAccountPassword);
var user = UserPrincipal.FindByIdentity(_principalContext, IdentityType.SamAccountName, account);
var userGroups = user.GetGroups(); 

foreach (var group in userGroups.Cast<GroupPrincipal>())
{
    //////////////////////////////////////////////////////
    // getting the underlying DirectoryEntry shown
    // to demonstrate that I can retrieve the underlying
    // properties without the exception being thrown
    DirectoryEntry directoryEntry = group.GetUnderlyingObject() as DirectoryEntry;

    var displayName = directoryEntry.Properties["displayName"];

    if (displayName != null && displayName.Value != null)
        Console.WriteLine(displayName.Value);
    //////////////////////////////////////////////////////

    Console.WriteLine(group.DisplayName);// exception thrown here...
}
var\u principalContext=new principalContext(ContextType.Domain、domainAddress、adContainer、adQueryAccount、adQueryAccountPassword);
var user=UserPrincipal.FindByIdentity(_principalContext,IdentityType.SamAccountName,account);
var userGroups=user.GetGroups();
foreach(userGroups.Cast()中的var组)
{
//////////////////////////////////////////////////////
//正在获取显示的基础DirectoryEntry
//以证明我可以检索底层
//属性,而不引发异常
DirectoryEntry DirectoryEntry=group.getUnderlineingObject()作为DirectoryEntry;
var displayName=directoryEntry.Properties[“displayName”];
if(displayName!=null&&displayName.Value!=null)
Console.WriteLine(displayName.Value);
//////////////////////////////////////////////////////
Console.WriteLine(group.DisplayName);//此处引发异常。。。
}
我可以抓取底层的
DirectoryEntry
对象并转储其属性和值,但只要访问
GroupPrincipal.DisplayName
属性(或任何相关属性),它就会抛出以下异常:

“System.Runtime.InteropServices.COMException(0x8007200A): 指定的目录服务属性或值不存在。\r\n\r\n 位于System.DirectoryServices.DirectoryEntry.Bind(布尔值 throwIfFail)\r\n在 System.DirectoryServices.DirectoryEntry.Bind()\r\n位于 System.DirectoryServices.DirectoryEntry.get\u SchemaEntry()\r\n位于 System.DirectoryServices.AccountManagement.ADStoreCtx.IsContainer(DirectoryEntry de)\r\n位于 System.DirectoryServices.AccountManagement.AdStoreCx..ctor(DirectoryEntry ctxBase,布尔值ownCtxBase,字符串用户名,字符串密码, ContextOptions选项)\r\n位于 System.DirectoryServices.AccountManagement.PrincipalContext.CreateContextFromDirectoryEntry(DirectoryEntry 条目)\r\n位于 System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()\r\n 在 System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()\r\n 在 System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()\r\n 位于System.DirectoryServices.Account Management.PrincipalContext.get\u QueryCtx()\r\n位于 系统.DirectoryServices.AccountManagement.Principal.HandleGet[T](T& currentValue、字符串名称、LoadState和state)\r\n位于 System.DirectoryServices.AccountManagement.Principal.get\u DisplayName()\r\n 在控制台Application 9.Program.Main(字符串[]args)”


为什么我能够转储底层
DirectoryEntry
的原始属性,但不能直接调用
GroupPrincipal
上的任何属性?什么会导致这种异常?请注意,这不会发生在“域用户”组上,但会发生在后续组上…

为什么要使用
.getunderyingobject()
调用?似乎完全多余。。。只需直接使用
GroupPrincipal
.SamAccountName
属性

试试这个:

foreach (var group in userGroups.Cast<GroupPrincipal>())
{
    Console.WriteLine(group.SamAccountName);
    Console.WriteLine(group.DisplayName);
    Console.WriteLine(group.IsSecurityGroup);
}
foreach(userGroups.Cast()中的var组)
{
Console.WriteLine(group.SamAccountName);
Console.WriteLine(group.DisplayName);
Console.WriteLine(group.IsSecurityGroup);
}

似乎要容易得多-不?

我找到了解决办法。如果我将上下文传递给
GetGroups
方法,它就会工作

var user = UserPrincipal.FindByIdentity(_principalContext, IdentityType.SamAccountName, account);
var userGroups = user.GetGroups(_principalContext);
显然,这将检索到的组限制在与上下文关联的域中。虽然这不是直观的,因为上下文首先用于检索用户


这让我相信,以前一定有来自其他域的组被返回,并且权限是阻止访问这些信息的。

我这样做是为了证明我可以。如果我调用group.SamAccountName,它会立即抛出上述异常。我将编辑代码示例,以明确这一点…无法重现该行为-当我直接访问
属性时,我会得到预期的结果。。。这可能是你用来查询广告的用户的权限问题吗???@marc_s,可能是权限问题,但我正试图缩小这个问题的范围,因为处理这个问题既慢又痛苦,所以我想获得尽可能多的关于这个问题的信息,