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


102

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

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

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

編集ドメインコントローラーまたは現在のドメイン内のユーザーを検索するプログラムを作成したい場合、どうすればそれを実行できますか?


私はこの問題の解決策を書くのに少し時間を費やしたので、私はそれをプログラミングの質問にして再オープンするつもりだと思いました。
tvanfosson 2008

回答:


253

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

echo %LOGONSERVER%

おそらく当時はドーキーが考えていたものではなかったでしょうが、それでもおそらく、ほとんどのスレッドの読者が探しているものでしょう。ええと...それはドーキーが探していたものでした。はぁ!
andersoyvind

3
マシンが属していない別のドメインでDCを探している場合、これは機能しません。
Brett Veenstra、2012年

@DorkyEngineerこれをあなたの選択した回答としてマークするのはどうですか?
ErikE 2013年

20

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

nltest /dclist:{domainname}

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


3
nltest /dclist:ラップトップが接続されているドメインのすべてのコントローラーを一覧表示します(Windows 7)
GMasucci

12

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);
           }
       }
    }
}

7

コマンドラインから、logonserver env変数をクエリします。

C:>セットL

LOGONSERVER = '\' \ DCNAME


6

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


レポートを取得するには、引数「/ R」を使用する必要がありました。
ジョサイア

ぜひお試しくださいgpresult /Z!!
ErikE 2015

/ Zの利点は何ですか?使用中のDCを決定するために、それらは比較可能であるように見えます。
ジョサイア

1
利用可能な情報が豊富なため、人々はこのオプションに案内されることを好むかもしれません。しかし、その通りです。DCを使用しているだけで、他のオプションの方が簡潔です。
ErikE 2015


0

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

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

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.