Active Directoryユーザーの上司を一括取得したい

目次

はじめに

Microsoft365やGoogle Workspaceを運用する中で、上司と部下の関係を取得したいシーンがあると思います。例えば3rdパーティ製品の送信ゲートウェイを利用する場合などがあてはまります。社外へのメール送信は上司をCCに強制追加してから送信させるや、上司が承認するまでメールを止めるといった運用が考えられます。今回の記事ではActive Directory 上のユーザ属性値である上司を取得する方法をご紹介します。

前提条件

今回ご紹介する自動取得ツールは、以下の条件で実行することを前提としています。

  • Active Directory 上でPowershellスクリプトを実行します
  • Active Directory のユーザ属性のうち、電子メール属性に値が入っているもののみを取得します
  • 部下のメールアドレスと上司のメールアドレスをCSVファイルに出力させます
  • 細かいエラーハンドリングを行いませんので上司属性に値がないとエラーが出ます(プログラムは止まりません)
  • Domain Adminsグループのメンバーで実行・確認を実施しています

データ取得準備

まずはActive Directory ユーザの属性メンテナンスを実施しましょう。下記画像を参考に値を入れてください。

Active Directoryユーザーの属性設定

続いて上司側もメンテナンスを実施しましょう。直属の部下は自動的に入力されているはずですので、ユーザに上司がいない場合については上司属性が空欄になります。電子メール属性のみをメンテナンスしてください。

上司属性の設定

利用するコマンド

本作業では以下のコマンドを利用します。

コマンド用途
Get-ADUserActive Directory からユーザ情報を取得します
Out-Fileファイルに文字を書き込みます

実行サンプル

下記のスクリプトをps1ファイルにして実行していただいても、Powershellウィンドウにそのままコピペしていただいても問題ありません。スクリプトが止まったりはしませんが、上司の値が空の状態だとエラーが出ますので必要に応じてtry catchしてください。

#初期設定 ファイルパス指定してください
$listFile = "C:\temp\xxxxxxx.csv"

"mail,manager" | Out-File $listFile -append

Get-ADUser -Filter * -Properties * |
    %{
        $userMail = ""
        $managerMail = ""

        if($_.mail -ne $null)
        {
            $userMail = $_.mail
            $managerMail = (Get-ADUser -Identity $_.Manager -Properties *).mail
            $userMail + "," + $managerMail | Out-File $listFile -append
        }     
    }

取得したCSVファイルは以下の形式で出力されます。

カラム
mailメールアドレス
managerメールアドレス

まとめ

書いてしまえば実はすごく簡単に上司・部下の関係が取得できることが分かったと思います。Azure AD Connect以外の同期ツールではActive Directory の上司属性を同期できるツールがない認識(管理人が知らないだけかも)です。取得したデータを使って上司の値を流し込むことも可能でしょうし、3rdパーティ製品の上司・部下紐づけにも利用できると思います。結局はActive Directory のユーザ属性をいかにメンテナンスしているかが肝になってしまいますがせっかくメンテナンスしているなら有効活用していただけると良いと思ってます。

ということで、直近でActive Directoryユーザーの上司属性を取得することがありましたので情報として残しておきます。本記事はここまでとさせていただきます。

弊社では、サービスの新規導入、設計変更や運用のご支援を行っております。サービス提供ご希望のお客様は下記よりお問い合せください

この記事を書いた人

大塚 英正のアバター 大塚 英正 エンジニア

主にMicrosoft365とGoogle Workspaceの販売と導入をやっています。

目次