ルートフォレスト名でrootDSEパーティションからontainedすることができます。 rootDomainNamingContext属性を見てください。このwiilはあなたの森のルートドメインを返します。 1つのフォレストに2つのドメインツリーがある場合には機能しないため、ユーザーDNからフォレスト名を抽出することはお勧めしません。 2番目の方法は、現在のドメインのグローバルカタログ内のユーザーを検索することです。グローバルカタログには、フォレスト全体からのすべてのユーザーの部分レプリカが含まれています。
以下のコードは、グローバルカタログで検索します。私は2つのドメインを持っていますので、2人のユーザーを返します。あなたが複数の結果に対処する必要があること、注意してください返さ:このコードで
var forest = Forest.GetCurrentForest();
var globalCatalog = GlobalCatalog.FindOne(new DirectoryContext(DirectoryContextType.Forest, forest.Name));
using (var connection = new LdapConnection(new LdapDirectoryIdentifier(globalCatalog.Name, 3268)))
{
var entries = new List<SearchResultEntry>();
var searchRequest = new SearchRequest(string.Empty, "(samaccountname=administrator)", SearchScope.Subtree, null);
var searchOptionsControl = new SearchOptionsControl(System.DirectoryServices.Protocols.SearchOption.DomainScope);
searchRequest.Controls.Add(searchOptionsControl);
var pageResultRequestControl = new PageResultRequestControl(1000);
searchRequest.Controls.Add(pageResultRequestControl);
do
{
var response = (SearchResponse)connection.SendRequest(searchRequest);
if (response != null)
{
if (response.ResultCode != ResultCode.Success)
{
throw new ActiveDirectoryOperationException(response.ErrorMessage, (int) response.ResultCode);
}
foreach (var c in response.Controls.OfType<PageResultResponseControl>())
{
pageResultRequestControl.Cookie = c.Cookie;
break;
}
entries.AddRange(response.Entries.Cast<SearchResultEntry>());
}
}
while (pageResultRequestControl.Cookie != null && pageResultRequestControl.Cookie.Length > 0);
}
いくつかの注意事項:コースの 1.このコードはそれではない生産1。より一般的なLdapSearcherを書くことができます。例えば、hereがあります。必要に応じてこのサーチャーの同期バージョンを作成できます。 2.エンタープライズ環境でDirectorySearcherを使用するとメモリリークなどが発生するため、サービスベースのアプリケーションではDirectorySearcherではなくLdapConnectionを使用することを強くお勧めします。issues
識別名を使用しようとしましたか? – hofmeister
卓越したnAme? – STORM