【Active Directory】PowerShellでユーザーを作成する

Active Directory にユーザーを何人も作るとき、「Active Directory ユーザーとコンピューター」で1人ずつ作ると時間がかかり、入力ミスも起きやすくなります。PowerShell の New-ADUser を使えば、コマンドでユーザーを作れます。CSV ファイルと組み合わせれば、まとめて作成できます。

この記事では、ユーザーを作る場所(OU の識別名)を調べる方法、New-ADUser で1人作る方法、CSV ファイルから複数のユーザーを作る方法を確認します。

この記事でわかること
  1. ユーザーを作る OU の識別名(distinguishedName)を調べる
  2. New-ADUser でユーザーを1人作る
  3. CSV ファイルと Import-Csv で、複数のユーザーをまとめて作る
実行する場所

New-ADUser などのコマンドは、ActiveDirectory モジュールに入っています。ドメインコントローラ、または「リモート サーバー管理ツール(RSAT)」の AD DS ツールを入れたコンピューターの PowerShell で、ドメイン管理者などユーザーを作成できる権限のあるアカウントで実行します。

ユーザーを作成する場所を調べる

コマンドでユーザーを作るときは、作成先の OU を -Path に識別名(distinguishedName)で指定します。-Path を省略すると、ドメインの既定のユーザー用コンテナー(通常は Users)に作られます。ここでは、営業部 OU の識別名を調べます。

拡張機能の表示を有効にする

「Active Directory ユーザーとコンピューター」で 表示 ›› 拡張機能 をクリックして、チェックを入れます。拡張機能を表示すると、プロパティに「属性エディター」タブが表示されるようになります。

OU の識別名を確認する

営業部 OU を右クリックして プロパティ を選び、「属性エディター」タブを開きます。distinguishedName 属性の値が、この OU の識別名です。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

営業部のプロパティ画面イメージ
全般 / 管理者 / オブジェクト / セキュリティ / COM+ / 属性エディター
属性値
⋮
displayName<未設定>
1distinguishedNameOU=営業部,DC=hirotanoblog,DC=local
dSASignature<未設定>
⋮
distinguishedName をダブルクリック(文字列の属性エディター)
属性(A)distinguishedName
2値(V)OU=営業部,DC=hirotanoblog,DC=local
図1 営業部 OU の識別名(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1distinguishedNameOU の識別名。ディレクトリの中での位置を表す
2値ダブルクリックすると開く画面から、値をコピーできる

識別名は、下の階層から順に、カンマで区切って並べたものです。OU=営業部,DC=hirotanoblog,DC=local は「hirotanoblog.local ドメインの直下にある営業部 OU」を表します。

部分意味
OU=営業部組織単位(OU)の名前
DC=hirotanoblog,DC=localドメイン名 hirotanoblog.local を、ドット(.)ごとに DC= で表したもの

コマンドでユーザーを作成する

PowerShell の New-ADUser で、ユーザーを作成します。よく使うパラメーターは次のとおりです。

パラメーター意味
-Nameオブジェクトの名前。「Active Directory ユーザーとコンピューター」の一覧の「名前」になる(必須)
-SamAccountNameWindows 2000 より前の形式のログオン名(ドメイン名\ログオン名 の形で使う)
-UserPrincipalNameユーザー プリンシパル名(UPN)。ログオン名@ドメイン名 の形のログオン名
-DisplayName表示名
-Pathユーザーを作る OU やコンテナーの識別名。省略すると既定のユーザー用コンテナー
-AccountPassword初期パスワード。文字列ではなく SecureString(保護された文字列)で渡す
-Enabledアカウントを有効にするかどうか
-ChangePasswordAtLogon次回ログオン時にパスワードの変更を求めるかどうか

New-ADUser でユーザーを作る

営業部 OU に、ユーザー「佐藤太郎」を作成します。

PowerShell

New-ADUser -name '佐藤太郎' -SamAccountName satout -UserPrincipalName satou.taro@hirotanoblog.local -Path "OU=営業部,DC=hirotanoblog,DC=local" -AccountPassword (ConvertTo-SecureString -AsPlainText 'Password@123' -force) -Enabled $true -ChangePasswordAtLogon $true
指定意味
-name ‘佐藤太郎’オブジェクトの名前を「佐藤太郎」にする
-SamAccountName satoutWindows 2000 より前の形式のログオン名を「satout」にする
-UserPrincipalName satou.taro@hirotanoblog.localUPN を「satou.taro@hirotanoblog.local」にする
-Path “OU=営業部,DC=hirotanoblog,DC=local”営業部 OU に作成する
-AccountPassword (ConvertTo-SecureString …)文字列「Password@123」を ConvertTo-SecureString で SecureString に変換し、初期パスワードにする
-Enabled $trueアカウントを有効にする
-ChangePasswordAtLogon $true初回ログオン時にパスワードの変更を求める

初期パスワードは、ドメインのパスワードのポリシー(長さや複雑さの要件)を満たす必要があります。パスワードのポリシーは 【Active Directory】デフォルトドメインポリシーについて で紹介しています。

パスワードをコマンドに書く注意

ConvertTo-SecureString -AsPlainText を使うと、パスワードが平文のままコマンドの履歴やスクリプトに残ります。本番では、Read-Host -AsSecureString で実行時に入力するなど、パスワードを残さない方法を使います。

作成したユーザーを確認する

「Active Directory ユーザーとコンピューター」の営業部 OU に、佐藤太郎が作成されています。

Active Directory ユーザーとコンピューター画面イメージ
hirotanoblog.local ›› 営業部
名前種類
1佐藤太郎ユーザー
図2 営業部 OU に作成されたユーザー(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1佐藤太郎-Name で指定した名前のユーザーが、-Path で指定した営業部 OU にできた

ユーザーのプロパティの「アカウント」タブで、ログオン名と次回ログオン時のパスワード変更も確認します。

佐藤太郎のプロパティ画面イメージ
全般 / 住所 / アカウント / プロファイル / 電話 / 組織 / 所属するグループ …
1ユーザー ログオン名(U)satou.taro @hirotanoblog.local
2ユーザー ログオン名 (Windows 2000 より前)HIROTANOBLOG\ satout
⋮ (中略)
3アカウント オプション☑ ユーザーは次回ログオン時にパスワード変更が必要
☐ ユーザーはパスワードを変更できない
☐ パスワードを無期限にする
アカウントの期限◉ なし○ 有効期限
図3 作成したユーザーのアカウント タブ(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示対応するパラメーター
1satou.taro @hirotanoblog.local-UserPrincipalName
2HIROTANOBLOG\ satout-SamAccountName
3次回ログオン時にパスワード変更が必要-ChangePasswordAtLogon $true

PowerShell で確認する場合は、Get-ADUser を使います。たとえば Get-ADUser -Filter * -SearchBase "OU=営業部,DC=hirotanoblog,DC=local" で、営業部 OU のユーザーを一覧できます。

CSV ファイルで複数のユーザーを作成する

複数のユーザーを作るときは、ユーザーの情報を CSV ファイルにまとめ、Import-Csv で読み込んで、1行ずつ New-ADUser に渡します。

users.csv 1行 = 1ユーザー Import-Csv 列名がプロパティに ForEach-Object 1行ずつ $_ で受け取る New-ADUser ユーザーを作成 営業部 OU 4人
図4 CSV ファイルからユーザーを作成する流れ

CSV ファイルを作る

Name、Email、Sam、OU の4つの列を持つ CSV ファイルを作ります。1行目には列名を書きます。

列内容使うパラメーター
Nameユーザーの名前-Name、-DisplayName
Emailユーザーのアドレス(UPN として使う)-UserPrincipalName
SamWindows 2000 より前の形式のログオン名-SamAccountName
OU作成先の識別名(OU=組織単位名,DC=…,DC=… の形)-Path

識別名にはカンマが入るので、OU 列の値はダブルクォーテーション(”)で囲みます。次の内容を users.csv として、C:\Users\Administrator\Documents に保存しました。

users.csv

Name,Email,Sam,OU
鈴木二郎,suzuki.jirou@hirotanoblog.local,suzukin,"OU=営業部,DC=hirotanoblog,DC=local"
高橋三郎,takahashi.saburou@hirotanoblog.local,takahashis,"OU=営業部,DC=hirotanoblog,DC=local"
田中四郎,tanaka.shirou@hirotanoblog.local,tanakas,"OU=営業部,DC=hirotanoblog,DC=local"
山田五郎,yamada.gorou@hirotanoblog.local,yamadag,"OU=営業部,DC=hirotanoblog,DC=local"
CSV の文字コード

Windows PowerShell 5.1 の Import-Csv は、BOM のないファイルを UTF-8 として読みます。Excel の「CSV(コンマ区切り)」で保存した Shift_JIS のファイルをそのまま読むと、日本語の名前が文字化けします。CSV は UTF-8 で保存するか、Shift_JIS のまま読む場合は -Encoding Default を付けます。

CSV を読み込んでユーザーを作る

次のコマンドで、users.csv の各行からユーザーを作成します。

PowerShell

Import-Csv -Path "C:\Users\Administrator\Documents\users.csv" | ForEach-Object {New-ADUser -name $_.name -DisplayName $_.name -SamAccountName $_.sam -UserPrincipalName $_.email -Path $_.ou -AccountPassword (ConvertTo-SecureString -AsPlainText 'password@123' -force) -Enabled $true -ChangePasswordAtLogon $true}

このコマンドは、次の順に処理します。

  1. Import-Csv で users.csv を読み込み、1行ごとに、列名をプロパティに持つオブジェクトを作る
  2. ForEach-Object で、そのオブジェクトを1つずつ取り出す
  3. 取り出したオブジェクト($_)の値を使って、New-ADUser でユーザーを作る。パスワード、有効化、初回ログオン時のパスワード変更は全員同じ
変数意味
$_.nameName 列の値(ユーザーの名前)
$_.samSam 列の値(SamAccountName)
$_.emailEmail 列の値(UserPrincipalName)
$_.ouOU 列の値(作成先の識別名)

プロパティ名は大文字と小文字を区別しないので、CSV の列名が Name でも $_.name で取り出せます。なお、Email 列は UPN として使っているだけなので、ユーザーのメール属性(mail)は設定されません。メール属性も入れる場合は -EmailAddress を足します。

コマンドを実行すると、CSV の内容どおりに営業部 OU にユーザーが作成されます。

Active Directory ユーザーとコンピューター画面イメージ
hirotanoblog.local ›› 営業部
名前種類
1高橋三郎ユーザー
佐藤太郎ユーザー
山田五郎ユーザー
田中四郎ユーザー
鈴木二郎ユーザー
図5 CSV から作成したユーザー(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
15人のユーザー先に作った佐藤太郎に加えて、CSV の4人(鈴木二郎、高橋三郎、田中四郎、山田五郎)が作成された

CSV ファイルを使えば、作成するユーザーの一覧を表計算ソフトで用意して、そのまま一括で登録できます。入力ミスや作業時間を減らせます。

うまくいかないとき

状態よくある原因確認すること
New-ADUser が見つからないActiveDirectory モジュールがないDC か、RSAT の AD DS ツールを入れたコンピューターで実行しているか
パスワードのエラーになる初期パスワードがパスワードのポリシーを満たしていない長さと複雑さの要件
OU が見つからないエラーになる-Path の識別名が違う属性エディターの distinguishedName と一致しているか
名前が文字化けするCSV の文字コードと読み込み方が合っていないUTF-8 で保存するか、-Encoding Default を付ける
同じ名前のユーザーでエラーになる同じ SamAccountName や、同じ OU に同じ名前のユーザーがすでにあるCSV に重複がないか、既存のユーザーと重ならないか

まとめ

作業使うものポイント
作成先を調べる属性エディターの distinguishedName表示 ›› 拡張機能 を有効にする
1人作るNew-ADUserName と SamAccountName、UPN、Path、SecureString のパスワード
まとめて作るImport-Csv + ForEach-Object + New-ADUserOU 列はダブルクォーテーションで囲む。CSV の文字コードに注意
確認するユーザーとコンピューター、Get-ADUserログオン名と次回ログオン時のパスワード変更

コメント