我有一个问题,我在网上搜索过,但没有找到可接受的原因或解决方案。
我的目标是创建一个控制台应用程序来获取组及其子组的成员。我可以使用 DirectoryServices 来做到这一点。但我希望使用新的 AccountManagement API,因为这将在很大程度上简化我的代码。我的代码如下(一些名称/路径被屏蔽)
PrincipalContext insPrincipalContext =
new PrincipalContext(ContextType.Domain,
"my.grp.net",
"DC=my,DC=grp,DC=net",
"domain\\username", "Password"
);
ArrayList users = new ArrayList();
GroupPrincipal oGroupPrincipal =
GroupPrincipal.FindByIdentity(insPrincipalContext,IdentityType.SamAccountName, "My group name");
PrincipalSearchResult<Principal> usrs = oGroupPrincipal.GetMembers(true);
foreach (UserPrincipal p in usrs)
{
if (p != null)
users.Add(p.SamAccountName);
}
此代码检索几千个用户,然后引发如下错误。如果在调试模式下我按 F5 继续,它会在再次抛出相同的异常之前返回几千个用户。
System.DirectoryServices.AccountManagement.PrincipalOperationException was unhandled Message=The specified directory service attribute or value does not exist.
Source=System.DirectoryServices.AccountManagement ErrorCode=-2147016694 StackTrace:
at System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDirectoryEntryAttributes(DirectoryEntry de)
at System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.MoveNextMemberEnum()
at System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.MoveNext()
at System.DirectoryServices.AccountManagement.FindResultEnumerator`1.MoveNext()
at System.DirectoryServices.AccountManagement.FindResultEnumerator`1.System.Collections.IEnumerator.MoveNext()
at ManagedActiveDirectoryTrial.Program.Main(String[] args) in C:\Khalid Naseem\Trial\ManagedActiveDirectoryTrial\ManagedActiveDirectoryTrial\Program.cs:line 77
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart() InnerException: System.Runtime.InteropServices.COMException
Message=The specified directory service attribute or value does not exist.
Source=System.DirectoryServices
ErrorCode=-2147016694
StackTrace:
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.RefreshCache()
at System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDirectoryEntryAttributes(DirectoryEntry de)
此异常对我没有多大帮助,因为我无法确定抛出此错误的用户和属性。
我能够使用 DirectoryServices API 检索同一组及其子组的用户,但我想避免多行代码和递归。
对此问题的解决方案将不胜感激。
谢谢 - 哈立德