エクスポート元ADのグループおよびユーザーを、export-ADData.ps1 を使用してCSVにエクスポートします。この際、かなり特殊な場合を除きシステムユーザーおよびグループは不要なので、必ず -ExcludeSystemObject(-nosys) オプションを付けてください。
インポート先ADについても同様に -ExcludeSystemObject を付けてエクスポートします。インポート先が枝OUであっても、エクスポート時の -DNPath には必ずそのADの基底ドメインを指定してください。
すべてのCSVおよびTXTファイルはUTF-8エンコーディングで保存してください。ShiftJISやCP932などのローカルエンコーディングは避けるべきです。
グループとユーザーのSamAccountNameが、エクスポート元・インポート先の双方で重複していないかを確認します。もし重複があれば、リネームや削除など方針を決めておきます。
📝 主にユーザーを例に説明していますが、グループも同様です
Users_domain_local-nosys.csv(Groups_domain_local-nosys.csv)
export-ADData.ps1 でシステムオブジェクトを除外してエクスポート。
インポートに不要なカラムを削除
インポートに使用されない列を含んでいても import-ADData.ps1 の動作に影響はありませんが、整理しておいたほうがこの後の編集やチェックがスムーズです。
必要最小限のカラム
グループデータ:
MemberOf,CN,Description,DisplayName,DistinguishedName,GroupCategory,GroupScope,groupType,HomePage,isCriticalSystemObject,ManagedBy,Name,ObjectCategory,ObjectClass,SamAccountName
📝 注:
import-ADData.ps1 では使用されませんが、作業中に参考にしたり将来の活用に備えて、保持しておくことをお勧めします。GroupCategory と GroupScope のオーバーライド:
グループの category や scope を変更する必要がある場合は、専用の独立カラムである GroupCategory と GroupScope を触るようにしてください。本来それらの属性の元となるカラムは groupType ですが、 ビット数値である groupType を再計算するよりも確実です。
GroupCategory: "Security" または "Distribution"GroupScope: "Global", "DomainLocal"または "Universal"専用カラムの方が先に評価されます(それぞれ別に)。専用カラムは存在しながら、値が空文字や不正な値だった場合には、当該グループのインポート自体がスキップされます。
groupTypeの値には安易に触らない方が無難です。専用カラムの方を調整するほうが安全です。詳しくは、当レポジトリの README や import-ADData.ps1 のヘルプを参照してください。
ユーザーデータ:
MemberOf,Manager,CannotChangePassword,CanonicalName,City,CN,codePage,Company,Country,countryCode,Department,Description,DisplayName,DistinguishedName,Division,EmailAddress,EmployeeID,EmployeeNumber,Enabled,Fax,GivenName,HomeDirectory,HomeDrive,HomePage,HomePhone,Initials,isCriticalSystemObject,MobilePhone,Name,ObjectCategory,ObjectClass,Office,OfficePhone,Organization,OtherName,PasswordNeverExpires,POBox,PostalCode,PrimaryGroup,ProfilePath,SamAccountName,sAMAccountType,ScriptPath,State,StreetAddress,Surname,Title,userAccountControl,UserPrincipalName
📝 注:
CanonicalName, CN, codePage, HomePage, Initials, Organization, PrimaryGroup, sAMAccountType など一部の列は現状 import-ADData.ps1 では使用されませんが、作業中に参考にしたり将来の活用に備えて、保持しておくことをお勧めします。
任意のユーザーにパスワードを登録したい場合は"Password"列を追加してください。この列は、空欄の場合には import-ADData.ps1 によって無視されるので、追加しても害はありません。詳しくは README やimport-ADData.ps1のヘルプを参照してください。
userAccountControl関連の専用カラムについて (CCP/CPL/PNE):
通常は userAccountControl にビットとして格納されている属性のうち、いくつかは、CSVの専用列によって設定することも可能です。これにより、userAccountControlのビット値を再計算するという面倒でミスをはらむ作業を避けられます。
"CannotChangePassword" (CCP): export-ADData.ps1の出力に既定で存在"ChangePasswordAtLogon" (CPL): 使用する場合は要追加"PasswordNeverExpires" (PNE): export-ADData.ps1の出力に既定で存在TRUE, YES, 1 のいずれか (大文字小文字区別なし)、無効化なら FALSE, NO, 0。userAccountControl のビット値よりも優先されます (ただし例外あり)。userAccountControl ビットへファールバックします。ただし、TRUE (ビットが立っている) の場合に限られます。userAccountControl の 0x40 ビットへのフォールバックはしません。ChangePasswordAtLogon は「今すぐにパスワードを変更せよ」である一方、CannotChangePassword はパスワードの変更を禁止しており、同時に設定するわけには行きません。そのため import-ADData.ps1 は、あってはならない組み合わせにならないよう、コンフリクト回避評価を行います。詳しくは、当レポジトリの README や import-ADData.ps1 のヘルプを参照してください。これらの値の普遍化、衝突回避ポリシー、PNE 設定時の安全対策などについても述べられています。
不要な列を削除するには、いくつか方法があります:
手動で削除 (Excel)
一旦 Excel に (例えば、Users_domain_local-nosys.xlsx と Groups_domain_local-nosys.xlsx) 読み込ませて、不要な列を手動で削除。
スクリプトで一括削除 (filter-csv-columns.ps1)
補助スクリプト utils/filter-csv-columns/filter-csv-columns.ps1 を使えば、以下のようにして、自動で削除することができます:
前述の「必要最小限のカラム」の文字列を (カンマも含めて) ファイルに保存します (UTF-8, CRLF):
column_list-Groups.csvcolumn_list-Users.csvそして、PowerShellコンソール上で下記それぞれを実行します:
.\filter-csv-columns.ps1 -InFile .\Groups_domain_local-nosys.csv -OutFile .\Groups_domain_local-slim.csv -ColumnFile .\column_list-Groups.csv
.\filter-csv-columns.ps1 -InFile .\Users_domain_local-nosys.csv -OutFile .\Users_domain_local-slim.csv -ColumnFile .\column_list-Users.csv
これだけです! 念のため、出力ファイルをチェックしてくださいね。詳しくは filter-csv-columns.ps1 のヘルプやコメントを参照してください。
Excelマクロで一括削除 (DeleteExtraColumns.bas)
utils/filter-csv-columns/DeleteExtraColumns.bas は、Excelブックにインポートして実行することで、不要な列の除かれたデータを追加のワークシートとして生成することができるマクロです。
もとのワークシートは改変されませんが、念のため、複製したワークブック上で実行するか、バックアップを採ってから適用することをお勧めします。
詳しい使い方は DeleteExtraColumns.bas 内のコメントを参照してください。
Users_domain_local-slim.xlsx(Groups_domain_local-slim.xlsx)
不要な列を除去した後にこのファイル名で保存します。ただし filter-csv-columns.ps1 で処理した場合は必要ありません。
Users_domain_local-slim.csv(Groups_domain_local-slim.csv)
上記ExcelファイルをCSV(UTF-8)として”名前を付けて保存”します。(filter-csv-columns.ps1 で処理した場合は既にこのファイルができているはずです)
exclude-users-regex.txt)を作成します。少数であれば手作業で削除しても構いませんが、作業の途中で変更が入ったり、元データの採りなおしから始めなくてはならなくなった際に役立ちます:
,*alpha*,
,*foxtrot*,
その後(Linuxの場合の例):
grep -v -f exclude-users-regex.txt Users_domain_local-slim.csv > Users_domain_local-slim-mod.csv
これにより、指定したエントリを除外した”mod” CSVが作成されます。
ユーザーの場合、このファイルがインポート用の最終形になります。
Users_domain_local-slim-mod.xlsx(Groups_domain_local-slim-mod.xlsx)
Excel形式で保存します。
グループの場合、インポート時のグループどうしの依存関係によるレースコンディションを減らすため、一旦Excel化して、ソートすることをお勧めします。(推奨ソート条件:第1キー SamAccountName、第2キー DistinguishedName)。