ドメインコントローラーサーバー以外からActiveDirectoryに問い合わせをする
部署の人のメールの一覧を取得したくて、ActiveDirectory へのコマンド問い合わせを調べてみました。
「Active Directoryをインストールしたサーバ上で実行しましょう」という情報ばかりしかネットになかったので独立サーバ/クライアントから問い合わせできるところから始めます。
目次
準備編
サーバの場合
サーバマネージャのダッシュボードから役割と機能の追加を選択してください。
役割と機能の追加ウィザードが起動するので「次へ」を選択します。
「サーバープールからサーバーを選択」にチェックし、対象のサーバを選択します。
左ペインで「機能」を選択し、下記にチェックを入れます。
>役割管理ツール
>AD DSおよびAD LDSツール
AD DSツール > AD DSスナップインおよびコマンドラインツール →管理ツールのActiveDirectory関連および、コマンドラインのDSQueryなどが入る
Windows PowerShell用Active Directoryモジュール
クライアントOSの場合
OSに対して管理ツールを追加する必要があります。
マイクロソフトのサイトで「リモート サーバー管理ツール」を検索してください。
- Windows 7 Service Pack 1 (SP1) 用のリモート サーバー管理ツール
https://www.microsoft.com/ja-jp/download/details.aspx?id=7887 - Windows 8.1 用のリモート サーバー管理ツール
https://www.microsoft.com/ja-jp/download/details.aspx?id=39296 - Windows 10 用のリモート サーバー管理ツール
https://www.microsoft.com/ja-jp/download/details.aspx?id=45520
インストール後、コントロールパネルから以下のメニューを開きます。
プログラムと機能
>Windowsの機能の有効化または無効化
>役割管理ツール
>AD DSおよびAD LDSツール
AD DSツール > AD DSスナップインおよびコマンドラインツール →管理ツールのActiveDirectory関連および、コマンドラインのDSQueryなどが入る
Windows PowerShell用Active Directoryモジュール
コマンドプロンプトによる問い合わせ
DSQueryを使います。
DSQueryは古くからあるコマンドなのでネットに整備された情報があるため割愛します。
PowerShellによる問い合わせ
取り出したデータをテキストに加工するとか、2次加工がコマンドプロンプトに比べてずっとしやすいので、今回はPowerShellを使って処理を行います。
1 2 3 4 5 6 |
Import-Module ActiveDirectory #ADアカウントが分かっている人を元に、どんな情報が取れるか調べる $User = Get-ADUser [調べたい人のADアカウント] (-Property *) #内容を表示 $User |
(-Properties *)を付けなかった場合の実行結果はこんな感じ
1 2 3 4 5 6 7 8 9 10 |
DistinguishedName : CN=ytaro,OU=[課名],OU=[部名],OU=[会社名],OU=OU Organization,DC=domain,DC=company,DC=local Enabled : True GivenName : 太郎 Name : ytaro ObjectClass : user ObjectGUID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx SamAccountName : ytaro SID : S-X-X-XX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXX Surname : 山本 UserPrincipalName : ytaro@domain.company.local |
- Descriptionに部署のツリーが入っていそうだったので、自分の部署の人かどうかを調べる
1 2 3 |
[String]$Department = $User.Description $Department $Department.Contains("[自分の部署名]") #同じ部署だったら$Trueが返ってくる |
- 名前からユーザを調べる方法
1 2 3 4 5 6 7 8 9 10 11 |
$Name=山本 太郎 #調べたい人の名前 $User= Get-ADUser -LDAPFilter "(DisplayName=*$Name)" -Properties * if(@($User).Length -ne 1) {Echo "メールアドレスからアカウントが一意に決まりませんでした"} else{ [String]$Account = $User.SamAccountName $Account [String]$mail=$User.mail $mail |
- 同じ部署の人の人数と一覧を取得する
1 2 3 4 5 6 7 |
$UsersArray = Get-ADUser -SearchBase "OU=[部名],OU=[会社名],OU=OU Organization,DC=[domain],DC=[company],DC=local" -Filter * #部に所属している人数を数える $UsersArray.count #データをCSVに出力 $UsersArray|export-csv -encoding default -path C:\log\ADUSER.csv |
CSVに落とせてしまえば、後はやりたい放題(ry
“ドメインコントローラーサーバー以外からActiveDirectoryに問い合わせをする” に対して2件のコメントがあります。