web-dev-qa-db-ja.com

どのコンピューターがWindowsのドメインコントローラーであるかをプログラムで確認するにはどうすればよいですか?

クライアントコンピューターが接続されている特定のドメインのドメインコントローラーの名前/ IPアドレスを特定する方法を探しています。

当社には、テストに使用する小さなネットワークが多数あり、それらのほとんどには独自の小さなドメインがあります。例として、ドメインの1つに「TESTLAB」という名前を付けます。 TESTLABドメインのメンバーであるWindows XPワークステーションがあり、ドメインに定義されているユーザーを確認できるように、ドメインコントローラーの名前を把握しようとしています。 。私たちのラボでは、Windows Server 2000とWindows Server 2003(および実際にはおそらくNT 4サーバーが2つ)が混在しているため、両方で機能するソリューションを見つけるのは良いことです。

インターネットで見ると、Windows Power Shellやnltestなどのさまざまなユーティリティがあるように見えますが、これらはすべて他のユーティリティをダウンロードしてインストールする必要があります。追加のものをインストールせずにドメインコントローラーを見つける方法を見つけたいと思っていました。

EDITドメインコントローラーまたは現在のドメイン内のユーザーを検索するプログラムを作成する場合、どのようにすればよいですか?

96
Dorky Engineer

最も単純なプログラミング言語:DOSバッチ

echo %LOGONSERVER%
250
MZywitza

Windowsのcmdで、次のコマンドを入力します。

nltest /dclist:{domainname}

特定のドメインのすべてのドメインコントローラーを一覧表示します

19
Lado Morela

C#/。NET 3.5では、実行する小さなプログラムを作成できます。

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    string controller = context.ConnectedServer;
    Console.WriteLine( "Domain Controller:" + controller );
} 

これにより、現在のドメイン内のすべてのユーザーがリストされます。

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    using (UserPrincipal searchPrincipal = new UserPrincipal(context))
    {
       using (PrincipalSearcher searcher = new PrincipalSearcher(searchPrincipal))
       {
           foreach (UserPrincipal principal in searcher.FindAll())
           {
               Console.WriteLine( principal.SamAccountName);
           }
       }
    }
}
12
tvanfosson

コマンドラインから、logonserver env変数を照会します。

C:> SET L

LOGONSERVER = '\'\DCNAME

7
Sri

Windowsコマンドプロンプトでgpresultを実行します。現在のドメイン、現在のユーザー、ユーザーとコンピューターのセキュリティグループ、グループポリシー名、Active Directory識別名などに関する豊富な情報を取得できます。

6
ErikE

powershellの場合:$ env:logonserver

2
Wim

DomainControllerがマシンが属していないドメインに存在するときに情報を取得するには、さらに何かが必要です。

  DirectoryContext domainContext =  new DirectoryContext(DirectoryContextType.Domain, "targetDomainName", "validUserInDomain", "validUserPassword");

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
0
Brett Veenstra