PowerShell を使用してドメイン コントローラの情報を取得する方法

PowerShell を使用して Active Directory ドメインコントローラーの情報を取得することは、トラブルシューティングや環境の把握に非常に役立ちます。ADモジュールのGet-ADDomainControllerコマンドレットは、特にセットアップの確認、役割の確認、構成の確認などに役立ちます。しかし、RSAT が正しくインストールされていない、あるいは必要な情報を見つけるためのコマンドがわからないなど、多くのユーザーが問題に遭遇します。このガイドでは、このコマンドレットを活用するための最も一般的な方法と、すべての DC が実際にアクセス可能で正常に動作しているかどうかを確認するための便利なスクリプトを紹介します。

マシンが現在使用しているDCを検索したり、すべてのコントローラーを一覧表示したり、特定のサイトやロールを調べたりする場合でも、これらのコマンドとスクリプトを使えば、頭を悩ませる手間を大幅に省くことができます。もちろん、Windowsはこれを本来あるべきよりも少し分かりにくくしているからです。DCが実際にオンラインで応答しているかどうかを自動確認するためのコマンドライン、ショートカット、そして場合によっては1つか2つのスクリプトが必要になるかもしれません。

PowerShell を使用してドメイン コントローラーの情報を取得する方法

現在のドメイン コントローラに関する基本情報を取得する

パラメータなしで実行するとGet-ADDomainController、マシンが現在認証されているDCに関するデータを取得します。これは、どのDCと通信しているのかを再確認したいときに便利です。IPアドレス、ホスト名、OSバージョン、ロールなどが表示されます。なぜこのように動作するのかは分かりませんが、AD環境がそれほど複雑でない限り、通常は正確です。

Get-ADDomainController

デフォルトでは利用可能なすべての情報が返されますが、特定の部分が必要な場合は、フィールドを選択したり、フィルター処理したりできます。

検出コマンドを使用して最も近いまたは特定のDCを検索する

ここからがさらにすごいところです。Windows はネットワーク上または特定のサイト内のコントローラーを検出してくれるので、非常に便利です。例えば、マシンが通常通信する最も近い DC を見つけるには、次のコマンドを実行します。

Get-ADDomainController -Discover

さらに積極的に、新たな検出を強制し、AD Web サービス ロールを検索する場合 (DC に AD Web サービス ロールがインストールされていることを確認したい場合に便利です)、次を試してください。

Get-ADDomainController -ForceDiscover -Discover -Service ADWS

プライマリ ドメイン コントローラー (PDC) またはその他の FSMO の役割を見つける必要がある場合は、次のように役割を指定できます。

Get-ADDomainController -Discover -Service PrimaryDC

ドメイン内のすべての DC に関する情報を取得するには、次のコマンドを実行します。

Get-ADDomainController -Filter *

これを他のコマンドにパイプすることもできます。たとえば、コントローラーがいくつあるかを測定することができます。

Get-ADDomainController -Filter * | Measure-Object

出力が多すぎる場合は、次のように適切にフォーマットすることができます。

Get-ADDomainController -Filter * | Select-Object Name, ipv4Address, OperatingSystem, Site | Sort-Object Name

一部の設定では、DC が異なる信頼されたドメインにある場合、次のように特定のドメイン名で-Serverパラメータを指定できます。

Get-ADDomainController -Filter * -Server dc01.test.com | Select-Object Name, ipv4Address, IsGlobalCatalog, Site

特定の基準に基づいてドメイン コントローラをフィルタリングする

特定のサイトや特定の役割を持つDCなど、特定の種類のDCを探している場合は、これらのフィルターが役立ちます。例えば、IPアドレスでDCを検索するには、次のようにします。

Get-ADDomainController -Identity "192.168.100.6"

または、名前に「dc02」が含まれるすべての DC:

Get-ADDomainController -Filter {name -like "*dc02*"} | Select-Object Name, ipv4Address, OperatingSystem, Site

または、すべての RODC (読み取り専用ドメイン コントローラー) を検索します。

Get-ADDomainController -Filter {IsReadOnly -eq $true} | Select-Object Name, ipv4Address, OperatingSystem, Site

「ローマ」のような特定のサイトの DC を知りたい場合は、次のようにします。

Get-ADDomainController -Filter {Site -eq "Rome"} | Select-Object Name, ipv4Address, OperatingSystem, Site

すべてのドメインコントローラが実際に起動して実行されているかどうかを確認する

これは、ネットワークの問題やDCの健全性のトラブルシューティングを行う際に非常に役立ちます。各DCの関連ポートをpingまたはテストする簡単なスクリプトを作成できます。以下の例では、ポート636(LDAPS)をチェックしています。これはセキュアLDAPでよく使用されるポートであり、ポートが開いていてリッスンしているかどうかは簡単に確認できます。開いていない場合は警告が表示されます。

$DCs = Get-ADDomainController -Filter * | Select-Object Hostname, Ipv4Address, IsGlobalCatalog, Site, Forest, OperatingSystem ForEach ($DC in $DCs) { $Result = Test-NetConnection -ComputerName $DC. Hostname -Port 636 -InformationLevel Quiet if ($Result -ne $true) { write-host "$($DC. Hostname) — NOT available" -BackgroundColor Red -ForegroundColor White } else { write-host "$($DC. Hostname) — available" -BackgroundColor Green -ForegroundColor White } }

これにより、どのDCが応答し、どのDCが応答しないかを簡単に確認できます。正直に言うと、DCが不安定になったり、問題が発生したりすることもあります。簡単なポートテストを行うことで、推測作業を大幅に減らすことができます。

もちろん、このスクリプトを調整して他のポートをチェックしたり、追加の診断を実行したり、結果をログに記録したりすることもできます。マシンによっては、スクリプトの微調整が必​​要になったり、初回実行時に失敗する場合がありますが、通常は再起動または再実行することで解決します。ここで重要なのは自動化です。

まとめ

  • PowerShell は、AD ドメイン コントローラーをクエリし、ニーズに応じてフィルター処理するのに最適です。
  • 検出コマンドは、最も近い DC または特定の DC を見つけるのに役立ち、時間の節約になります。
  • DC の可用性をチェックするスクリプトは簡単にセットアップでき、トラブルシューティング時に多くの手間を省くことができます。

まとめ

これらのコマンドとスクリプトを使えば、大量のログを調べたり、一つ一つ手動でpingを実行したりすることなく、ドメインコントローラーをきちんと把握できます。Windowsに何を指示すればいいのかを理解した上で、あとはWindowsに任せるという、いわば「やらされている」作業です。なぜ直感的に操作しづらいのかは分かりませんが、一度慣れてしまえば、今までどうやって操作していたのか不思議に思うでしょう。

うまくいけば、これによって誰かの時間が数時間短縮され、AD 管理が少しはわかりやすくなります。