アカウント台帳を作ったり、別のソフトウェアにアカウントを複製したりするために、Active Directoryのアカウント情報をエクスポートしたい場合がある。csvdeコマンドを利用すると、CSV形式でエクスポートできる。アカウントの名称や種類による絞り込みも可能だ。
対象OS:Windows XP/Windows Vista/Windows 7/Windows Server 2003/Windows Server 2008/Windows Server 2008 R2
Active Directory(AD)には、ドメイン・ユーザーのアカウント名やID、所属グループといった情報が格納されている。それらの情報をエクスポートして加工し、別の用途に使いたいことがある。例えば、ユーザー・アカウントの台帳をExcelで管理する場合や、ADと連携していないサーバ・ソフトウェアでADのアカウントと同じ名称のアカウントを登録したい場合などが挙げられる。
ADのアカウント情報をエクスポートするには、マイクロソフト提供のcsvdeコマンドやldifdeコマンドが手軽で便利だ。前者はCSV形式で、後者はLDIF形式(1行ずつ属性名とその値が記録される形式)で出力される。VBScriptやPowerShellなどのスクリプトでもエクスポートできるが、少なからずプログラムを組む必要があり、手間がかかる。複雑な加工を自動化する場合を除けば、csvdeコマンドやldifdeでも十分役に立つ。
本稿ではcsvdeコマンドでADのアカウント情報をエクスポートする手順と注意点を説明する。ldifdeコマンドについては、TIPS「Active Directoryのアカウント情報をエクスポートする(ldifdeコマンド編)」を参照していただきたい。またインポートについては、別のTIPSで解説する予定だ。
■記事内目次
csvdeコマンドを利用するには、ADを制御するためのツールをインストールする必要がある。その手順はWindows OSごとに異なる。
■Windows XPの場合
次のダウンロード・センターのページにあるADAM(Active Directory Application Mode)をインストールすると、%SystemRoot%\ADAMフォルダにcsvde.exeがインストールされる。
検索パスには登録されないので、「%SystemRoot%\ADAM\csvde.exe」というようにフル・パスで指定して実行する。
■Windows Vistaの場合
まず、次のTIPSの手順でRemote Server Administration Tools(RSAT)をインストールする。
その後、コントロール・パネルの[プログラムと機能]アプレットから[Windows の機能の有効化または無効化]メニューをクリックし、[リモート サーバー管理ツール]−[役割管理ツール]までツリーを開き、次のいずれかの役割管理ツールを有効化する。
■Windows 7の場合
まず、Windows Vistaの場合と同様にRSATをインストールする。その後、コントロール・パネルの[プログラムと機能]アプレットから[Windows の機能の有効化または無効化]メニューをクリックし、[リモート サーバー管理ツール]−[役割管理ツール]−[AD DS および AD LDS ツール]までツリーを開き、次のいずれかの役割管理ツールを有効化する。
■Windows Server 2003の場合
特にセットアップすることなく、csvdeコマンドを実行できる(%SystemRoot%\system32フォルダにcsvde.exeが存在するはずだ)。
■Windows Server 2008の場合
サーバ・マネージャの[機能]にある[機能の追加]をクリックし、[リモート サーバー管理ツール]−[役割管理ツール]までツリーを開き、次のいずれかの役割管理ツールを有効化する。
■Windows Server 2008 R2の場合
サーバ・マネージャの[機能]にある[機能の追加]をクリックし、[リモート サーバー管理ツール]−[役割管理ツール]−[AD DS および AD LDS ツール]までツリーを開き、次のいずれかの役割管理ツールを有効化する。
csvdeコマンドの使い方は、コマンド・プロンプト上でオプションを指定せずに「csvde」を実行すると表示される。csvdeコマンドはデフォルトではエクスポート・モードで動作するので、エクスポート先のファイル名指定などのオプションを付けて実行すればよい。
まず、エクスポートしたいADのドメインに所属しているWindows PCに、ADのアカウント情報を取得できる権限を持ったユーザー・アカウント(例えばDomain Adminsグループ所属のユーザーなど)でログオンする(別ドメインやワークグループから実行する方法については後述する)。
csvdeコマンドでADのアカウント情報をエクスポートするには、「-f <エクスポート・ファイル>」というオプションを指定する。またデフォルトでは、日本語を含む属性が「X'02000……」というようにエンコードされて扱いにくい。そこで-uオプションを指定すると、文字コードをUnicodeにして日本語をそのまま出力できる。
C:\Temp>csvde -u -f export.csv ……Unicodeでexport.csvにエクスポートする
"dc01.example.jp" に接続しています
SSPI を使って現在のユーザーとしてログインしています
ディレクトリをファイル export.csv にエクスポートしています
エントリを検索しています...
エントリを書き出しています
...........................................................
……(省略)……
..........................................
エクスポートが完了しました。後処理を実行しています...
4002 個のエントリがエクスポートされました
コマンドが正しく完了しました
上記のようにcsvdeコマンドを実行すると、所属しているADの全オブジェクトの情報がexport.csvにエクスポートされる。その1行目は列の項目を表すヘッダー行で、2行目から各アカウントの情報が記載されているはずだ。
DN,objectClass,description,distinguishedName,instanceType,……
"CN=user01,CN=Users,DC=example,DC=jp",user,出亜 花子,"CN=user01,CN=Users,DC=example,DC=jp",4,……
"CN=manager01,CN=Users,DC=example,DC=jp",user,出亜 太郎,"CN=maanger01,CN=Users,DC=example,DC=jp",4,……
"CN=test03,CN=Users,DC=example,DC=jp",user,テスト用アカウント,"CN=test03,CN=Users,DC=example,DC=jp",4,……
……
……(省略)……
デフォルトでは、csvdeコマンドはADの全オブジェクトの情報をエクスポートするため、例えば組織単位(OU)やシステム関連のオブジェクトなど、アカウント以外の不要な情報も記録されてしまう。必要な情報だけを抜き出すには、そのためのオプションをcsvdeに指定する必要がある。
ユーザー・アカウントのみエクスポートするには、次のように-rオプションを指定する。
csvde -u -f export.csv -r objectCategory=user
グループ・アカウントをエクスポートするには、上記の「user」の代わりに「group」を指定すればよい。
特定の名前を持つユーザー・アカウントのみエクスポートしたい場合は、検索条件をLDAPの形式で指定する。例えば、名字(性)の頭文字が「s」から始まるユーザー・アカウントのみエクスポートするには、次のように-rオプションと検索文字列を指定する。
csvde -u -f export.csv -r "(&(objectCategory=user)(sn=s*))"
「sn」は名字を格納している属性名である。
あるOUやコンテナに含まれるアカウントのみエクスポートするには、-dオプションを利用する。例えばexample.jpドメインのUsersコンテナの場合は、「-d "cn=Users,dc=example,dc=jp"」というようにコンテナの場所を指定する。
csvde -u -f export.csv -d "cn=Users,dc=example,dc=jp"
また、「sales」というOUに限定する場合は、次のように-dオプションを指定する。
csvde -u -f export.csv -d "ou=sales,dc=example,dc=jp"
デフォルトでは、指定したOUやコンテナに含まれるサブ・コンテナ以下、すなわちサブ・ツリー全体がエクスポートされる。サブ・コンテナは含めず、指定したOU/コンテナ内に含まれるオブジェクトだけに限定するには、次のように-pオプションを指定する。
csvde -u -f export.csv -d "ou=sales,dc=example,dc=jp" -p OneLevel
csvdeはデフォルトで、エクスポート対象のオブジェクトが持つ全属性をエクスポートしようとする。しかし、例えばアカウント台帳を作成する場合など、用途によって必要な属性は限られている。そこで属性を絞り込むオプションを指定する。例えば、バイナリ値の属性を省略するには-nオプションを指定すると、GUIDやSIDといったバイナリ値がエクスポート・データから省かれる。
csvde -u -f export.csv -n
あらかじめ必要な属性が判明している場合は、次のように-lオプションで各属性をカンマで区切って指定すると、それらの属性だけがエクスポートされる。
csvde -u -f export.csv -r objectCategory=user -l cn,description,distinguishedName,displayName,sAMAccountName
逆に特定の属性を省きたいなら、それを-oオプションで指定する。以下では、ADに保存されたユーザーの証明書だけ省いてエクスポートするように指定している。
csvde -u -f export.csv -r objectCategory=user -o userCertificate
ログオン中とは別のADに所属しているPCや、ワークグループ構成のPCから、ADの情報をエクスポートしたい場合は、対象のドメインから情報を取得できる資格情報を指定する必要がある。具体的には、次のように-bオプションや-sオプションを指定する。
csvde -u -f export.csv -b <ユーザー名> <ドメイン名> <パスワード> -s <ドメイン・コントローラ名>
例えば、example.comドメインのadmin02アカウントを用いて、dc02.example.comというドメイン・コントローラからエクスポートするには、次のようにcsvdeコマンドを実行する。<パスワード>に「*」を指定すると、入力を促すプロンプトが表示されるので、指定した<ユーザー名>のパスワードを入力する。
C:\Temp>csvde -u -f export.csv -b admin02 example.com * -s dc02.example.com
dc02.example.com のパスワードを入力してください: ******** ……パスワードを入力する
"dc02.example.com" に接続しています
ドメイン "example.com" に SSPI を使って "admin02" としてログインしています
ディレクトリをファイル export.csv にエクスポートしています
エントリを検索しています...
エントリを書き出しています
....................................................
.................................
エクスポートが完了しました。後処理を実行しています...
326 個のエントリがエクスポートされました
コマンドが正しく完了しました
csvdeコマンドに-uオプションを指定して、文字コードをUnicodeにしてエクスポートした場合、そのCSVファイルを単にダブルクリックしてExcelに読み込ませると、カンマが区切り文字として認識されず、日本語も文字化けしてしまう。正しく読み込ませるには、Excelの[開く]メニューでファイル・オープン・ダイアログを開き、ファイル形式として[テキスト ファイル]を選択してから、エクスポートしたCSVファイルを開く。するとテキスト・ファイル・ウィザードが始まるので、区切り文字にカンマを指定してウィザードを完了させる。このとき文字コードはUnicodeではなく「932 : 日本語 (シフト JIS)」と自動判定されるが、そのままでも文字化けせずに正しく読み込める。
csvdeコマンドの詳細については、次のマイクロソフトのリファレンス・ページを参照していただきたい。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.