PowerShell を使って Active Directory のユーザー操作をする

実行環境

実行環境は以下となります。

  • Windows Server 2019

PowerShell で用意されている Active Directory 関連のコマンド一覧

Active Directory 向けに利用できる PowerShell のコマンドレットは、以下のコマンドで確認出来ます。Windows Server 2019 だとコマンドレットが 147個 あってここに載せると視認性が悪くなると思うので、全部を確認したい人は各自でお願いします。

使う頻度が高いコマンドレットの使用例

ドメイン内のユーザー情報を取得する(Get-ADuser)

ログオン名が “Administrator” の情報を取得する。

上記のとおり、デフォルトだと全ての属性を取得することは出来ません。全ての属性を取得するためには、以下のように「-Properties」オプションを使います。全属性を取得する時は「*」を指定し、特定の属性のみ取得したい時は、属性名を「,」で繋げて記述します。

 

ドメイン内のユーザー数が数千くらいであれば問題はないけど、数万とか数十万とかの環境だと、全ユーザーの全属性を取得して処理とかすると PowerShell 実行時のメモリ使用量とかが上る可能性があるので、必要なプロパティのみ取得した方がいいと思います。

あと、デフォルトで取得できる 10個 の属性は高速に検索出来るけど、追加で取得しないと行けない属性の検索速度は若干遅いので、大規模環境だとスクリプトの処理スピード等の考慮が必要な場合には気をつけましょう。

 

取得したユーザー情報を CSV に出力する場合。

 

ドメイン内の全ユーザーの全ての属性を取得する場合。

 

ログオン名の先頭が「user」から始まるユーザーを取得する場合。

 

最終ログインが1年以上前のユーザーを無効化する(Disable-ADAccount)

ユーザーの属性には、そのユーザーが最後にログオンした時間が記録される lastLogon、lastLogonTimestamp 属性とありますが、属性ごとに違いがあるので注意が必要です。

属性名 説明
lastLogon ・ユーザーがログオンする際にリアルタイムに更新されるログオン時間
・1つのドメインコントローラーで更新されても、他のドメインコントローラーに複製されない。
lastLogonTimestamp ・ドメインコントローラー間で複製される。
・通常の複製間隔では複製されないため、直前のログオンなどを調べたいときには使用出来ない。

 

ここでは、1年以上前と多少複製されてなくても問題ないので、lastLogonTimestamp 属性を使った例とします。また、lastLogon、lastLogonTimestamp 属性ともに、1601年1月1日0時0分 からの 100ナノ秒で記録されてて処理しずらいので、.NET Fremework の FromFileTime メソッドを使用して変換します。こういうところも PowerShell が便利なところ。

流石に、本番環境でいきなりこのスクリプトは流す勇気はないので、実際は、CSVファイルとかに出力してホントに無効化していいユーザーとかを精査が必要。

ユーザーの属性を変更する(Set-ADUser)

Set-ADUser コマンドレットを使えば、ユーザーの属性の変更が可能です。以下の例は、user001 の部署名を設定する場合。

 

Get-Aduser と組み合わせることで、部署名とかが変わった時は、こんな感じで一括して変更することが可能です。