ユーザー管理再入門[Part2]〜複数のユーザーを一括作成する方法〜基礎から分かるActive Directory再入門(8)

Active Directoryのユーザー管理でよく行われる作業の一つに「複数ユーザーの一括作成」がある。今回は、複数のユーザーをまとめて作成する方法を紹介しよう。

» 2014年11月14日 18時00分 公開
[国井傑(MVP for Directory Services)株式会社ソフィアネットワーク]
「基礎から分かるActive Directory再入門」のインデックス

連載目次

Active Directoryでユーザーを作成する方法あれこれ

 Active Directoryでユーザーを作成する場合、Windows Server標準の「Active Directoryユーザーとコンピューター」管理ツールを使うのが一般的だが、その他にもユーザーを作成する方法がいくつか用意されている。

 GUI(Graphical User Interface)の管理ツール「Active Directoryユーザーとコンピューター」では、100名、1000名という単位でユーザーを作成するのは現実的ではない。筆者としては、100名のユーザーをマウスのクリックだけで作成する姿を想像するだけで恐ろしくなる。

 それでは、効率良く複数(多数)のユーザーを作成するにはどうしたらよいのだろうか。今回はこの疑問に答えるために、さまざまなユーザー作成方法を確認しながら、複数のユーザーを効率的にまとめて作成するための具体的な方法を紹介する。

 まずは、Active Directoryでユーザーを作成する際に使用するツール/コマンド(コマンドレット)を確認しておこう。以下が主なツールとコマンドだ。

  • 「Active Directoryユーザーとコンピューター」管理ツール
  • 「Active Directory管理センター」管理ツール
  • 「csvde」コマンド(コマンドプロンプトから実行)
  • 「ldifde」コマンド(コマンドプロンプトから実行)
  • 「dsadd」コマンド(コマンドプロンプトから実行)
  • 「New-ADUser」コマンドレット(Windows PowerShellから実行)

 上記の管理ツール「Active Directoryユーザーとコンピューター」と「Active Directory管理センター」は、GUIからユーザーを作成する。1人、2人のユーザーを作成するのであれば最も手軽なツールだが、今回のテーマである「複数ユーザーの作成」には向かないので説明は割愛する。

 もし、これらのツールを使ってユーザーを作成するのであれば「管理者のためのActive Directory入門 〜第8回 Active Directoryの導入後の作業」が参考になる。

「csvde」コマンドと「ldifde」コマンドの活用

 「csvde」コマンドと「ldifde」コマンドは、事前にユーザー作成用のファイルを用意し、そのコマンドがそのファイル内容を読み取ってユーザーを作成する方法になる。

 作成するユーザー一覧のファイルがCSV(comma-separated variables)形式の場合はcsvdeコマンド、LDIF形式の場合はldifdeコマンドを使う。これらのコマンドはファイルさえ用意できれば簡単にユーザーを作成できるが、「パスワードが(事実上)設定できない」ことがデメリットになる。

 こうした理由もあり、最近では「dsadd」コマンドや「New-ADUser」コマンドレットを利用するケースが多くなっている(詳細は後述)。ここでは説明を割愛するが、今でもcsvde/ldifdeコマンドは、Active Directoryユーザーの情報をファイルに出力(エクスポート)する目的で活用することができる。詳細は以下の記事を参考にしてほしい。

「dsadd」コマンドの活用

 「dsadd」コマンドは、ユーザーなどのActive Directoryオブジェクトを作成するために用意されたコマンドだ。この他、変更に使われる「dsmod」コマンド、削除に使われる「dsrm」コマンドなどがある。ここでは、dsaddコマンドを使ってユーザーを作成する方法を確認しよう。

 dsaddコマンドを利用する場合は、コマンドプロンプトに1行で必要な情報を全て記述する。例えば、「example.com」ドメインの「Sales OU」に「kunii」という名前のユーザーを作成する場合は、次のようなコマンドを実行する(パスワードは「P@ssw0rd」に設定している)。

dsaddコマンドでのユーザー作成例

dsadd user "cn=kunii,ou=sales,dc=example,dc=com" -samid kunii -upn kunii@examplecom -pwd P@ssw0rd -display kunii


 コマンドプロンプトに以上の内容を入力して実行すると、ユーザーが1つ作成される。コマンドの主なポイントを解説しておくと、「dsadd user」の後にDN(Distinguished Name:識別名)形式でユーザーを作成する場所、「-upn」の後にUPN(「ユーザー名@ドメイン名」形式の名前)、「-pwd」の後にパスワードをそれぞれ指定している。

 DN形式でユーザーの名前と場所を指定する方法については、「Active Directoryオブジェクトの識別名(DN)とは」(@IT)を参照していただきたい。

 もし、複数のユーザーを作成する場合は、「メモ帳」などのテキストエディターで前述のコマンドを作成したい人数分記述し、拡張子「.bat」または「.cmd」でファイルを保存する(画面1)。そして、作成したファイルをダブルクリックすれば、メモ帳で記述したコマンドが1行目から順番に実行される。

画面1 画面1 「dsadd」コマンドをまとめて実行するには、「メモ帳」などで人数分のコマンドを記述して、「.bat」または「.cmd」ファイルとして作成する《クリックで拡大》

 dsaddコマンドでの作成方法は便利だが、作成するユーザーの人数分のコマンドを記述しなければならない点が面倒と思われるだろう。そこでお勧めしたいのが、コマンドプロンプトで実行可能な「For文」を利用してdsaddコマンドを実行する方法だ。

 話を簡単にするために、ここでは「For文とは?」という話は割愛し、まとめてユーザーを作成する方法に集中しよう。For文を使う場合は、以下のようなコマンドを実行すればよい。

For文でのユーザー作成例

for /F "tokens=1,2 delims=," %a in (users.txt) do dsadd user "cn=%a,cn=users,dc=contoso,dc=local" -samid %a -pwd "%b" -upn %a@contoso.local -display "%a"


 For文を見るのは初めてという方は、頭にクエスチョンマークが浮かぶかもしれないが、ポイントだけ押さえておこう。

 まず、カッコ内で指定している「users.txt」は、作成したいユーザーの名前などが記述されたテキストファイルになる。つまり、For文を使ったユーザー作成方法でも、あらかじめユーザーの名前をテキストファイルに全て書き出しておく必要があるのだ。ただし、書き方の作法は以下の画面2のように、カンマ(,)で区切って「ユーザー名,パスワード」を記述するだけなので非常に簡単になっている。

画面2 画面2 For文で使用するファイルの内容。作成するユーザーは「ユーザー名,パスワード」のように記述しておく《クリックで拡大》

 続いて「do」の文字の後ろに注目してほしい。この「do」以降が実行するコマンドの具体的な内容になる。このFor文ではユーザーを作成するので、「do」の後ろにdsaddコマンドを入力しているのだ。dsaddコマンドの中身はこれまで説明した通りだが、一箇所だけ異なるポイントがあるので注意してほしい。

 dsaddコマンドの中には「%a」や「%b」の文字が見えるが、これは前に指定したテキストファイル(users.txt)内に記述された文字を取ってくるように指定している。「%a」はファイル内のカンマで区切った最初の文字、つまり、前出の画面2の「haraguchi」「yamada」「sekine」を指定している。そして、「%b」はファイル内のカンマで区切った2番目の文字、つまり、「P@ssw0rd」を指定している。

 このように、テキストファイル内の文字を取り出して、dsaddコマンドの中に差し込んで繰り返し実行していくことで、複数のユーザーがまとめて作成される。上記のFor文を実行した結果が画面3になる。

画面3 画面3 For文を使ったユーザー作成方法。ファイル内の文字を取り出して順番に実行されていることが分かる《クリックで拡大》

 ユーザーごとに別々のOU(Organizational Unit:組織単位)に所属させたい、ユーザーの名字や名前を指定したいといったニースもあるだろう。まずはこのような方法で、まとめてユーザーが作成できるというベーシックな部分を押さえておこう。そうすれば、今後、自分の要望に合わせてカスタマイズするとき、何を学習すればよいかという指針も立てやすくなるはずだ。

「New-ADUser」コマンドレットの活用

 続いて説明するのは、Windows PowerShellの「New-ADUser」コマンドレットだ。New-ADUserコマンドレットは、Windows Server 2008 R2から利用可能なコマンドレットで、dsaddコマンドと同様にユーザーやグループなどのオブジェクトを作成できる。変更を行う「Set-ADUser」コマンドレットや、削除を行う「Remove-ADUser」コマンドレットなどもあるが、ここではNew-ADUserコマンドレットに絞って解説する。

 dsaddコマンドが古くからWindows Serverに用意されているにもかかわらず、New-ADUserコマンドレットを利用するメリットは、ほとんど属性に値を設定できる点にある。例えば、ユーザーのプロパティに「事業所」という属性がある。dsaddコマンドでは事業所の属性を指定できないが、New-ADUserでは設定できるのである。

 まず、スタンダードなユーザー作成方法だが、dsaddコマンドのときと同じように、PowerShellの画面でNew-ADUserコマンドレットに続けて必要な情報を全て記述すればよい。例えば、「example.com」ドメインの「Sales OU」に「kunii」という名前のユーザーを作成する場合は、次のようにNew-ADUserコマンドレットを実行する(パスワードは「P@ssw0rd」に設定している)。

New-ADUserコマンドレットでのユーザー作成例

$pwd= ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force

New-ADUser kunii -Path "ou=Sales,dc=example,dc=com" -sAMAccountName kunii -UserPrincipalName kunii@example.com -AccountPassword $pwd -displayName kunii -Enabled $true


 今回は実行する内容が、2行になっていることに注目してほしい。New-ADUserコマンドレットではパスワードを指定するとき、平文(暗号化されていない文)をそのまま利用することができない。そのため、1行目で「P@ssw0rd」という文字を暗号化し、「$pwd」という変数の中に格納しているのだ。

 2行目では、New-ADUserコマンドレットを使って、「kunii」という名前のユーザーを作成しようとしている。主なポイントだけ説明すると、「-Path」の後にDN形式でユーザーを作成する場所、「-UserPrincipalName」の後にUPN、「-AccountPassword」の後にパスワードを指定している。

 また、冒頭にも触れたが、New-ADUserコマンドレットの魅力は「-UserPrincipalName」や「-AccountPassword」のような、スイッチが用意されていない属性も指定できる点にある。例えば、事業所に「東京」という文字を入れたい場合は、次のようにコマンドレット実行すればよい。

New-ADUserコマンドレットで事業所に「東京」を設定する例

$pwd= ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force

New-ADUser -Name kunii -Path "ou=Sales,dc=example,dc=com" -sAMAccountName kunii -UserPrincipalName kunii@example.com -AccountPassword $pwd -displayName kunii -Enabled $true ?OtherAttributes @{'PhysicalDeliveryOfficeName'="東京"}


 「事業所」という属性は「PhysicalDeliveryOfficeName」という名前なので、「-OtherAttributes」というスイッチに続けて「@{'PhysicalDeliveryOfficeName'="値"}」と記述する。OtherAttributesスイッチはほとんどの属性に対応しているので、「PhysicalDeliveryOfficeName」の代わりに別の属性名を書けば、何でも値を設定することができる。

 New-ADUserコマンドレットを使って複数のユーザーを作成するときは、dsaddコマンドと同じように、あらかじめユーザー一覧が記述されたファイルを用意しておく。ただし、dsaddコマンドで使うファイルとは少し異なり、ファイルの1行目にはスイッチの名前を入力する(画面4)。そして、2行目以降には、それぞれのスイッチに入れる値を入力する。

画面4 画面4 ユーザーの一覧を記したファイルだが、1行目にはスイッチの名前が入っていることが分かる《クリックで拡大》

 ファイルの名前を「users.txt」で作成した場合は、次のようにコマンドレット実行すれば、ファイルの内容が読み取られて、順番にユーザーが作成される。

Import-Csv users.txt | %{New-ADUser ?Name $_.Name -Path $_.Path -sAMAccountName $_.sAMAccountName -UserPrincipalName $_.UserPrincipanName -AccountPassword (ConvertTo-SecureString $_.AccountPassword -AsPlainText -force) -displayName $_.displayName -Enabled $true}


 この実行例では、最初に「Import-Csv」コマンドレットで「users.txt」の内容を読み取り、1行ずつNew-ADUserコマンドレットを実行するようになっている。New-ADUserの前にある「%」は「{}(かっこ)の部分に書かれたコマンドレットを繰り返し実行しなさい」という意味だ。

 また、New-ADUserの中では値の部分に「$_.xxxxxxx」と書かれているが、「xxxxxxx」の部分にはCSVファイルの1行目に書いた内容が入る。例えば、「$_.Name」であれば、CSVファイルからカンマで区切った「Name」の部分から文字を取り出して、最初は「haraguchi」、次に「yamada」、最後に「sekine」が代入される。

使いやすい方法を選んで複数ユーザーの作成を簡単に!

 ここまで、dsaddコマンドとNew-ADUserコマンドレットを中心に複数のユーザーをまとめて作成する方法を説明した。2、3のユーザーを作成するだけなら「Active Directoryユーザーとコンピューター」管理ツールを使った方が圧倒的に早いが、100人分となるとそう簡単にはいかないだろう。

 今回はそれぞれのコマンドの特徴も紹介したので、まずは試していただき、自分が所属する組織で求められている要件や使いやすさを考慮しながら、利用すべき方法を選んでほしい。

マイクロソフトが期間限定公開中 Active Directoryのスキルをブラッシュアップしよう!

 クラウドの登場により、Active Directoryに求められる役割も変化しつつあります。

 クラウドに対応させるためのActive Directoryの設計ポイントとはどにあるのか? iOSやAndroidは、Active Directoryにどう絡むのか? Azure Active Directoryとは何者か? 生産性を高めるためのセキュリティを実現するには、どのようなインフラが必要か?

 今こそ、Active Directoryの役割を再学習し、古い知識をリセットしましょう!


筆者紹介

国井 傑(くにい すぐる)

株式会社ソフィアネットワーク取締役。1997年よりマイクロソフト認定トレーナーとして、Active DirectoryやActive Directoryフェデレーションサービス(ADFS)など、ID管理を中心としたトレーニングを提供している。2007年よりMicrosoft MVP for Directory Servicesを連続して受賞。なお、テストで作成するユーザーアカウントには必ずサッカー選手の名前が登場するほどのサッカー好き。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。