👥

Active Directory:CSV読み込んでユーザーの新規作成

2021/06/22に公開

オンプレAD環境でCSVを読み込んでアカウントを作成するするPowerShellを書いてみた。

前提条件

  • ドメインコントローラーにコンソールかリモートデスクトップでログオンして操作する
  • 管理者の PC から操作する場合は、Active Directory モジュールが使えること
  • 移動対象OU配下内に同一名のOUが存在しないこと

スクリプトの内容

  1. アカウント情報が記載されたCSVの読み込み
  2. ユーザー、OU、セキュアグループの判定
  3. 移動先OUがあるか判定
  4. 正常なら、OUの移動、現所属グループ削除、移動後の所属グループ追加

読み込むCSVのレイアウト

文字コードは、Shift_JIS

ADUserList.csv
"Name","DisplayName","Surname","Givenname","OU","Group"
"test-user01","テストユーザー01","テスト","ユーザー01","testOU01","sec-test01"

レイアウトの説明

項目 説明
Name アカウント名
DisplayName 表示名
Surname
Givenname
OU 所属OU
Group 所属グループ

完成したスクリプト

New_ADUser.ps1
# CSVファイルの情報からADユーザを一括作成

Import-Module ActiveDirectory

# 読み込むファイルを指定
$CSVFile = "./ADUserList.csv"
# ベースOUを指定
# 例:"OU=User,DC=test,DC=com"
$SearchOU = "OU=〇〇,DC=〇〇,DC=〇〇"
# 共通パスワード
$PASSWD = "12345678"
# ドメイン名
$DOMAIN = "tesut.com"

# CSVの読み込み(Shift_JIS)
Import-Csv $CSVFile -Encoding Default | ForEach-Object {

    # エラー判定用にデータ取得
    # コンソールのエラーを非表示にする
    $ErrorActionPreference = "silentlycontinue"

        # ユーザーがいるか判定
        # Get-ADUserでエラーだと「NULL」のまま
        $UserJudg = $NULL
        $TargetUser = $_.Name
        $UserJudg = Get-ADUser -Identity $TargetUser

        # SearchOU配下に異動先OUがあるか判定
        # Get-ADOrganizationalUnitでエラーだと「NULL」のまま
        $OUJudg = $NULL
        $TargetOU = $_.OU
        $OUJudg = Get-ADOrganizationalUnit -Filter 'Name -like $TargetOU' -SearchBase $SearchOU -SearchScope Subtree

        # SearchOU配下に追加するGroupがあるか判定
        # Get-ADGroupでエラーだと「NULL」のまま
        $GroupJudg = $NULL
        $TargetGroup = $_.Group
        $GroupJudg = Get-ADGroup -Filter 'Name -like $TargetGroup' -SearchBase $SearchOU -SearchScope Subtree

    # コンソールのエラーを再表示する
    $ErrorActionPreference = "continue"

    # ユーザーがいるか判定
    if ($UserJudg -eq $NULL)
    {
       # SearchOU配下に所属OUがあるか判定
        if($OUJudg -eq $NULL)
        {
            # TargetOUの打ち間違いエラー出力
            Write-Host -NoNewline $TargetUser " の所属OU 「" $TargetOU "」はありません"
            Write-Output ""
        }
        else
        {
            # ユーザー登録
            New-ADUser -Path $OUJudg.DistinguishedName -Name $_.DisplayName `
            -DisplayName $_.DisplayName `
            -sAMAccountName $_.Name `
            -Surname $_.Surname `
            -Givenname $_.Givenname `
            -UserPrincipalName ($_.Name+'@'+$DOMAIN) `
            -AccountPassword (ConvertTo-SecureString -AsPlainText $PASSWD -Force) `
            -ChangePasswordAtLogon $true `
            -Enabled $true `
            -PasswordNeverExpires $false
            
            # Groupがあるか判定
            if ($GroupJudg -eq $NULL)
            {
                 # エラー出力
                 Write-Host -NoNewline $TargetUser " の追加Gruop 「" $TargetGroup "」はありません"
                 Write-Output ""
		    }
            else
            {
                # グループ追加
                Add-ADGroupMember -Identity $TargetGroup -Members $TargetUser
            }
        }
    }
    else
    {
        # エラー出力
        Write-Host -NoNewline $TargetUser " はすでにいます"
        Write-Output ""
     }
}

Discussion