ルート AD グループが必要で、そのすべてのサブグループを列挙する必要があります。ADサーバーに接続してサブグループリストを取得しようとするコードがあります。
コードは次のとおりです。
private IEnumerable<SearchResult> GetSubGroups(string groupId)
{
using (var searcher = new DirectorySearcher(new DirectoryEntry(adServerName, adLogin, adPassword)))
{
searcher.Filter = string.Format("(&(objectClass=group)({0}))", groupId);
//Get the Root Group
var result = searcher.FindOne();
object resultMembers = result.GetDirectoryEntry().Invoke("Members", null);
foreach(var member in ((IEnumerable) resultMembers))
{
var memberEntry = new DirectoryEntry(member);
var subgroupsSearcher = new DirectorySearcher(memberEntry);
subgroupsSearcher.Filter = "(objectClass=group)";
subgroupsSearcher.PropertiesToLoad.Add("samaccountname");
subgroupsSearcher.PropertiesToLoad.Add("name");
var foundSubGroupResult = subgroupsSearcher.FindOne();
...
}
return new List<SearchResult> {result};
}
}
Invoke("Members", null) の結果を列挙するとき、結果ごとに別の DirectoryEntry を作成します。問題は、 asubgroupSearcher.FindOne()
が呼び出されると、最終的に a になることDirectoryServicesCOMException
です。
Here's the exception stack trace:
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindOne()
...other methods...
Exception の Message プロパティは次のように述べています: "An operations error occured"
ErrorCode をログに記録しました。-2147016672
また、サブグループ オブジェクトから DirectoryEntry を作成するときに、UserName プロパティを暗黙的に初期化しようとしました。
foreach(var member in ((IEnumerable) resultMembers))
{
var memberEntry = new DirectoryEntry(member);
memberEntry.Username = adLogin;
var subgroupsSearcher = new DirectorySearcher(memberEntry)
...
}
しかし、それは同じ結果をもたらしました。
私が間違っていることは何ですか?どんな助けもかなりのものです。