PowerShellを使用してActiveDirectoryにユーザーを一括登録する

Active Directory

毎年そこそこの人数が入社するため、ユーザー登録は結構な手間になります。
簡略化出来る業務は少しでも楽にしてしまいたい性分のため、PowerShellで一括登録するスクリプトを作成しました。

概要

複数人の新規ユーザー登録を行うスクリプトです。
私の業務向けに作成していますので、流用される際は必要箇所を変更してください。
PowerShellで実行すると、ps1ファイルと同じフォルダー内に保存したusers.csvファイルを読み込み、データがなくなるまでActiveDirectoryにユーザーを登録します。
users.csvのレイアウトについては後述の項目を参考にしてください。

サンプルコード

ipcsv users.csv -Encoding Default | %{
    $employeeID = $_.'employee_id'
    $userPrincipalName = $_.'ad_account_name' + '@hogehoge.co.jp'
    $company = 'hogehoge株式会社'
    $department = $_.'orgnaization_path'
    $department = $department.Replace('hogehoge','')
    $department = $department.Replace('\','')
    if($_.'manager' -eq '')
    {
        $manager = ''
    }else{
        $manager = 'CN=' + $_.'manager' + ',OU=Users,DC=hogehoge,DC=co,DC=jp'
    }
    New-ADUser `
        -SamAccountName $_.'ad_account_name' `
        -EmployeeID $employeeID `
        -EmployeeNumber $employeeID `
        -Name $_.'japanese_name' `
        -Surname $_.'japanese_family_name' `
        -GivenName $_.'japanese_given_name' `
        -DisplayName $_.'japanese_name' `
        -EmailAddress $_.'mail' `
        -Manager $manager  `
        -Company $company `
        -Department $department `
        -Title $_.'title' `
        -Path 'OU=Users,DC=hogehoge,DC=co,DC=jp' `
        -UserPrincipalName $userPrincipalName `
        -AccountPassword (ConvertTo-SecureString -AsPlainText 'hoge@HOGE@' -Force) `
        -OtherAttributes `
        @{'msDS-PhoneticDisplayName' = $_.'name'; `
        'msDS-PhoneticFirstName' = $_.'given_name'; `
        'msDS-PhoneticLastName' = $_.'family_name'} `
        -Enabled $true
}

詳細

所々解説します。

私が利用しているusers.csvファイルのレイアウトは以下になります。
1行目は列名になります。

employee_id,ad_account_name,japanese_family_name,japanese_given_name,japanese_name,name,given_name,family_name,mail,orgnaization_code,orgnaization_path,title,boss_structure,manager
101,user1,テスト,ユーザー1,テスト ユーザー1,TEST USER1,USER1,TEST,testuser1@hogehoge.co.jp,01,hogeホールディングス\営業部,部長,ボス1\ボス2,ボス2
102,user2,テスト,ユーザー2,テスト ユーザー2,TEST USER2,USER2,TEST,testuser2@hogehoge.co.jp,02,hogeホールディングス\製造部,,ボス1\ボス3\ボス4,ボス4

まずは、同じフォルダー内に保存したusers.csvファイルを ipcsv で読み込んでいます。
その結果を「|」で ForEachに値を渡しています。
「|」は パイプラインと言い、先のコマンドで出力された内容を次のコマンドに橋渡しするためのものです。かなり便利ですが、使用しすぎて可読性は下げないようにしましょう。
「%」は ForEach-Object コマンドレットのエイリアスです。

ipcsv users.csv -Encoding Default | %{
# 登録処理など
}

必要に応じて読み込んだデータを変数に設定しています。
読み込んだデータへのアクセスは $_.’列名’ で出来ます。
$department でごちゃごちゃしているのは、別途作成したユーザー管理ツールの都合で、組織階層から直属の組織を取得するためですので、ここは読み飛ばしてください。

    $employeeID = $_.'employee_id'
    $userPrincipalName = $_.'ad_account_name' + '@hogehoge.co.jp'
    $company = 'hogehoge株式会社'
    $department = $_.'orgnaization_path'
    $department = $department.Replace('hogehoge','')
    $department = $department.Replace('\','')
    if($_.'manager' -eq '')
    {
        $manager = ''
    }else{
        $manager = 'CN=' + $_.'manager' + ',OU=Users,DC=hogehoge,DC=co,DC=jp'
    }
    echo $_.'ad_account_name'

New-ADuser コマンドレットで各パラメータに値を設定し、ユーザー登録を行います。
-Path でどのOUにユーザーを作成するか指定出来ます。
-AccountPassword で初期パスワードも設定することが出来ますが、SecureString型に変換が必要なため (ConvertTo-SecureString -AsPlainText ‘初期パスワード’ -Force) としています。
ふりがななど、パラメータに存在しない項目については -OtherAttributes @{info=”テスト”} の用に記述して登録することが出来ます。

    New-ADUser `
        -SamAccountName $_.'ad_account_name' `
        -EmployeeID $employeeID `
        -EmployeeNumber $employeeID `
        -Name $_.'japanese_name' `
        -Surname $_.'japanese_family_name' `
        -GivenName $_.'japanese_given_name' `
        -DisplayName $_.'japanese_name' `
        -EmailAddress $_.'mail' `
        -Manager $manager  `
        -Company $company `
        -Department $department `
        -Title $_.'title' `
        -Path 'OU=Users,DC=hogehoge,DC=co,DC=jp' `
        -UserPrincipalName $userPrincipalName `
        -AccountPassword (ConvertTo-SecureString -AsPlainText 'hoge@HOGE@' -Force) `
        -OtherAttributes `
        @{'msDS-PhoneticDisplayName' = $_.'name'; `
        'msDS-PhoneticFirstName' = $_.'given_name'; `
        'msDS-PhoneticLastName' = $_.'family_name'} `
        -Enabled $true

利用可能なパラメータについては以下を参照ください。

 New-ADUser
   [-WhatIf]
   [-Confirm]
   [-AccountExpirationDate <DateTime>]
   [-AccountNotDelegated <Boolean>]
   [-AccountPassword <SecureString>]
   [-AllowReversiblePasswordEncryption <Boolean>]
   [-AuthenticationPolicy <ADAuthenticationPolicy>]
   [-AuthenticationPolicySilo <ADAuthenticationPolicySilo>]
   [-AuthType <ADAuthType>]
   [-CannotChangePassword <Boolean>]
   [-Certificates <X509Certificate[]>]
   [-ChangePasswordAtLogon <Boolean>]
   [-City <String>]
   [-Company <String>]
   [-CompoundIdentitySupported <Boolean>]
   [-Country <String>]
   [-Credential <PSCredential>]
   [-Department <String>]
   [-Description <String>]
   [-DisplayName <String>]
   [-Division <String>]
   [-EmailAddress <String>]
   [-EmployeeID <String>]
   [-EmployeeNumber <String>]
   [-Enabled <Boolean>]
   [-Fax <String>]
   [-GivenName <String>]
   [-HomeDirectory <String>]
   [-HomeDrive <String>]
   [-HomePage <String>]
   [-HomePhone <String>]
   [-Initials <String>]
   [-Instance <ADUser>]
   [-KerberosEncryptionType <ADKerberosEncryptionType>]
   [-LogonWorkstations <String>]
   [-Manager <ADUser>]
   [-MobilePhone <String>]
   [-Name] <String>
   [-Office <String>]
   [-OfficePhone <String>]
   [-Organization <String>]
   [-OtherAttributes <Hashtable>]
   [-OtherName <String>]
   [-PassThru]
   [-PasswordNeverExpires <Boolean>]
   [-PasswordNotRequired <Boolean>]
   [-Path <String>]
   [-POBox <String>]
   [-PostalCode <String>]
   [-PrincipalsAllowedToDelegateToAccount <ADPrincipal[]>]
   [-ProfilePath <String>]
   [-SamAccountName <String>]
   [-ScriptPath <String>]
   [-Server <String>]
   [-ServicePrincipalNames <String[]>]
   [-SmartcardLogonRequired <Boolean>]
   [-State <String>]
   [-StreetAddress <String>]
   [-Surname <String>]
   [-Title <String>]
   [-TrustedForDelegation <Boolean>]
   [-Type <String>]
   [-UserPrincipalName <String>]
   [<CommonParameters>]

詳細については Microsoft のドキュメントをご参照ください。

New-ADUser (ActiveDirectory)
Use this topic to help manage Windows and Windows Server technologies with Windows PowerShell.

おすすめ書籍

どこでもインターネットで調べることができますが、社内のセキュリティーポリシーでインターネットを利用できない場所で作業することもありますし、ネットワークトラブルで使用できないこともありますので、買って損はしない一冊です。

Windowsコマンドプロンプトポケットリファレンス
Windows PowerShell ポケットリファレンス

おわりに

PowerShell と csv ファイルを用いた方法は以上になります。
組織情報は Microsoft 365 を利用している関係で、連携するとTeamsやOutlookなどでも組織情報を利用できるようになるため追加しました。必要がなければ、これらの項目は削除してもいいです。

GUIでの作業はわかりやすくて便利なのですが、数が増えてくると時間を取りますし、他の業務に追われていると入力ミスしてしまったりしていましたが、PowerShell でかなり簡略化出来ました。一括更新についてもスクリプトは作成できていますので、後日掲載する予定です。

タイトルとURLをコピーしました