PowershellでActiveDirectoryのユーザーを管理する

ActiveDirectory(以下AD)のユーザーは人事異動等にともなって定期的に大きく変更されるので、手作用で更新していると非常に煩雑な事になります。Powershellの活用でADのユーザー管理の省力化を目指したいと思います。

Remote Server Administration Toolsのインストール

PowershellでActive Directoryのユーザー管理の為のコマンドレットを呼び出すためには、Remote Server Administration Tools(以下RSAT)をインストールする必要がある。インストールするRSATはクライアントOS毎に異なるので、対応するインストーラを以下からダウンロードする。
Remote Server Administration Tools (RSAT) for Windows Client and Windows Server (dsforum2wiki)

ADユーザーを更新する

更新する対象がデータベースなら削除して登録することを繰り返しても問題ない場合が多いが、ADユーザーの場合には削除して追加すると言うわけにはいきません。一度削除してしまうと、再登録してもユーザーを一意に識別するために使っているSIDやGUIDが異なる値になってしまい、別のユーザーとして識別されてしまいます。従って面倒でも既存のユーザーの有無を調べ、無ければ新規に作成し、あるなら必要に応じて項目を更新すると言う手続きにならざる得ません。

既存ユーザー有無確認

既存ユーザーの有無を確認するにはGet-ADUserを使う。Get-ADUserは一致するユーザーが存在しない場合には例外を投げるので、$existUserの値は変更されないまま$NULLとなる。

     $existUser = $NULL
     $existUser = Get-ADUser -Identity [ユーザー名]
     if ($existUser -eq $NULL)
     {
          # ユーザーが登録されていない場合の処理
     }
     else
     {
          # ユーザーが登録されている場合の処理
     }

ユーザーの追加

ユーザーを追加するにはNew-ADUserを使用します。ユーザーに関する諸設定を行うためにコマンドラインパラメータが非常に多いです。必要最低限を指定して、残りはSet-ADUserで処理した方が実装が容易かと思います。

     New-ADUser "[ユーザー名]"  -UserPrincipalName "[ユーザー名]@[ドメイン] .local") -DisplayName "[表示名]" -Path"OU=[新部署] , OU=[部門], DC=[ドメイン], DC=local " -Enabled $TRUE

既存ユーザーの一覧を取得

Get-ADUserは指定した条件にマッチするユーザーのリストを返す。フィルタ条件にアスタリスクを指定すると全てのユーザーが得られる。抽出条件の指定方法は多岐に渡るので詳細はオンラインヘルプに委ねる。

    $userAccountList = Get-ADUser -Filter *
     foreach ($userAccount in $userAccountList)
     {
          # 各ユーザーに対する処理
     }

組織単位の移動

組織単位はGet-ADUser で取得したユーザーアカウントのプロパティを参照すれば得られる。組織単位を変更する場合には、Move-ADObjectを使用して移動先の組織単位を設定する。

     if ($userAccount.DistinguishedName -notmatch ".*OU=[旧部署].*")
     {
           Move-ADObject -Identity $userAccount. ObjectGUID -TargetPath "OU=[新部署] , OU=[部門], DC=[ドメイン], DC=local"
     }

グループ設定の変更

ユーザーグループに割り当てるにはaddNoneGroupMemberを、ユーザーグループから削除するにはremoveExistGroupMemberを使う。

     # グループに追加する
     addNoneGroupMember $userAccount "グループ名"

     # グループから削除する
     removeExistGroupMember $userAccount "グループ名"

ユーザーの削除

Remove-ADUserを使えば削除する事が出来るが、誤って削除してしまうと同じSIDやGUIDを持つユーザーを復活させようとすると非常に難しくなる。従って削除するのではなくSet-ADUserでユーザーを無効にした上で、特定の組織単位に移動するに止める方が良い。

     if ($userAccount . Enabled)
     {
          $userAccount .Enabled = $FALSE
          Set-ADUser -Instance $userAccount
     }

     if ($userAccount . DistinguishedName -notmatch ".*OU=削除対象.*" )
     {
           Move-ADObject -Identity $userAccount. ObjectGUID -TargetPath "OU=削除対象 , OU=[部門], DC=[ドメイン], DC=local"
     }

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です