Active Directoryには、オブジェクトに関する情報のエクスポートとインポートを行うコマンドとして、csvdeコマンドとldifdeコマンドがある。この2種類のコマンドはいずれもテキスト形式ファイルに対してエクスポートやインポートを行うが、そのテキスト形式ファイルの記述方法が異なる。

csvdeコマンドは、CSV(Comma Separated Value、カンマ区切りテキスト)形式を使用する。それに対してldifdeコマンドはLDIF(LDAP Data Interchange Format)形式を使用する。

・LDIF形式の出力例

dn: DC=ad-domain,DC=company,DC=local
changetype: add
objectClass: top
objectClass: domain
objectClass: domainDNS
distinguishedName: DC=ad-domain,DC=company,DC=local
instanceType: 5
whenCreated: 20030520162125.0Z
whenChanged: 20030520162905.0Z
subRefs: DC=ForestDnsZones,DC=ad-domain,DC=company,DC=local
subRefs: DC=DomainDnsZones,DC=ad-domain,DC=company,DC=local
subRefs: CN=Configuration,DC=ad-domain,DC=company,DC=local
uSNCreated: 4098
uSNChanged: 12498
name: enfers
objectGUID:: 4HsN4Artf0CJZViXjYb/wQ==
creationTime: 126979216509025408
forceLogoff: -9223372036854775808
lockoutDuration: -18000000000
lockOutObservationWindow: -18000000000
lockoutThreshold: 0

一般的には、CSV形式の方が扱いやすいだろう。エクスポートしたデータをExcelなどに取り込んで利用、あるいは加工できるからだ。また、インポートによる一括登録を行う際のデータ作成も、CSV形式の方が容易になる。

オブジェクト一覧のエクスポート

csvdeコマンドでもldifdeコマンドでも、操作方法は同じだ。まずエクスポートについて解説しよう。

管理者権限があるユーザーアカウントでドメインコントローラにログオンして、コマンドプロンプトで「csvde -f <ファイル名>」あるいは「ldifde -f <ファイル名>と入力すると、オブジェクトの一覧を指定したファイルに書き出すようになっている。この方法では、Active Directoryに登録してあるすべてのオブジェクトがエクスポート対象になる。

また、対象となるOUやコンテナをLDAP識別名で指定して、特定のOUやコンテナだけをエクスポートの対象にする方法もある。以下に実行例を示す。

「ad-domain.company.local」ドメインのコンテナ「Users」を、「foo.csv」にエクスポート

csvde -d "CN=Users,DC=olympus,DC-kojii,DC=local" -f foo.csv

「ad-domain.company.local」ドメインのコンテナ「Users」を、「foo.ldf」にエクスポート

ldifde -d "CN=Users,DC=olympus,DC-kojii,DC=local" -f foo.ldf

「ad-domain.company.local」ドメインのOU「Tokyo」を、「foo.csv」にエクスポート

csvde -d "OU=Tokyo,Dc=ad-domain,dc=company,dc=local" -f foo.csv

「ad-domain.company.local」ドメインのOU「Tokyo」を、「foo.ldf」にエクスポート

ldifde -d "OU=Tokyo,Dc=ad-domain,dc=company,dc=local" -f foo.ldf

csvdeコマンド/ldifdeコマンドの主要な引数には、以下のものがある。

-i インポートを行う。省略するとエクスポートを行う
-f インポート/エクスポートの対象となるファイル名を指定する
-v コマンド実行時に、詳細な状況表示を行う
-j ログファイルの場所を指定する。省略するとログは出力しない
-u Unicodeを使用してファイルの読み書きを行う
-d エクスポートを行う際に、特定のOUやコンテナを指定する。省略するとドメイン全体が対象になる
-p エクスポートを行う際に、検索範囲を指定する。「Base」(指定した階層のみ)、「OneLevel」(指定した階層の直下のみ)、「Subtree」(指定した階層と、その下のサブツリーすべて)、のいずれかを指定する

オブジェクトの一括追加

csvdeコマンドもldifdeコマンドも、インポートによるオブジェクトの一括登録が可能だ。ただし、LDIF形式のファイルを手作業で用意するのは骨が折れるため、実質的に使い物になるのはcsvdeコマンドだけだろう。

インポートを行う際には「csvde -i <ファイル名>」と入力する。カレントフォルダにCSVファイルがない場合には、フルパス指定が必要になる。

注意しなければならないのは、インポートの際にデータを記述できる項目と、そうでない項目があることだ。データを記述できない項目については、インポートの際に「SAMデータベースがロックされています」というエラー報告が返ってくる。

そのため、識別名・表示名・ログオン名といった、必要最低限の項目だけデータを用意しておく方が無難だ。そして、以下の手順で作業を進めると良いだろう。

  1. まず、既存のオブジェクトに関するデータをcsvdeコマンドでエクスポートする。ダミーのユーザーアカウントを作成して各種プロパティを設定しておくと、後で編集する際に参考になるだろう
  2. 出力したCSVファイルをExcelなどで編集して、登録時に設定できる項目について、必要なデータを入力する。ダミーのデータを作成していた場合、それは不要なので削除する
  3. CSVファイルの準備ができたら、csvdeコマンドでインポートを行う

なお、csvdeコマンドでインポートしたユーザーアカウントは無効化した状態になっているので、インポート後に個別に有効化する必要がある。パスワードは空白になっている代わりに、次回ログオン時にパスワードの変更を求める設定になっている。