お代はタイトルの通り「Workgroup環境下でのWindows Serverの入れ替えと、アクセス権限の移行」。
ドメインを構築せず、Workgroup環境下でファイルサーバーや、DBサーバー、・・・etcを運用しているユーザーってのはまだまだ居るはず。
メーカーからの保守期限が来て、必要に迫られてサーバー入れ替えをする場合、最新のWindows Server 2012なんかは、こうしたWorkgroup環境下でユーザーや、フォルダへ設定したアクセス権限なんかを丸っと移行してくれるツールがあるようです。
しかし、Windows Server 2008 R2だと、そんなツールはありません。
しかし、普通に共有フォルダなんてコピーした日には、アクセス権限は移行できなくて、フォルダ毎にアクセス権限を設定等していたならば、手作業でもう一度アクセス権限を設定してあげなきゃなりません。
1.まずは揃えたいもの。
・addusers_x86.exe:ユーザの移行に使います。
・subinacl.exe:ファイル、フォルダのアクセス権限操作に使います。
・getsid.exe:ユーザのSIDの取得に使います。
※いずれもMicrosoftのWebサイトから取得可能です。
・移行する各ユーザのパスワード情報
(パスワードは移行できないので、改めて手打ちとなります。)
2.旧サーバー(移行元)にて作業。作業フォルダを作成
2.1. 作業フォルダへ、addusers_x86.exeをコピー
2.2. コマンドプロントで、作業フォルダへ移動
2.3. ユーザー、グループ情報をエクスポート
addusers_x86.exe ¥¥【旧サーバー名】 /d:u 【作業フォルダのパス】 ¥addusers_old.txt
2.4. エクスポートしたファイルから余分な情報を削除
2.5. addusers_old.txtをメモ帳等で開き、[User]と[Local]セクションを
残して削除します。
2.6. 「addusers_old.txt」内のサーバー名を新サーバー名に。
また、administorator、Guestを削除したうえで、別名にて保存。
例えば addusers_move.txt。
3.新サーバー(移行先)にて作業。作業フォルダを作成
3.1. 作業フォルダへ、addusers_x86.exeをコピー
3.2. コマンドプロントで、作業フォルダへ移動
3.1. 新サーバーに、旧サーバーのユーザー、グループ情報をインポート。
addusers_x86.exe /c 【作業フォルダのパス】¥addusers_move.txt ¥¥【新サーバー名】 /p:e
3.1. 各ユーザーのパスワードを一つずつ再設定。
4.データ/権限の移行
4.1. robocopy等を使って権限を含めてフォルダやファイルをコピー
robocopy.exe ¥¥【旧サーバー名】¥共有フォルダ名 "¥¥【新サーバー名】¥共有フォルダ名" /sec /e /copyall /R:3 /W:3 /NP /LOG:robo.log
4.2. 新サーバー上のコマンドプロンプトにて、作業フォルダへ移動
4.3. addusers_move.txtを開き、グループ/ユーザ名以外を削除。
ユーザー名のみが表示された状態に編集・削除。
削除後、
ANSI形式でファイルを保存。
4.5. addusers_move.txtを開き、グループ/ユーザ名以外を削除。
4.6. 以下のBATファイルを作業フォルダに作成して、1.batとして保存。
echo off
cls
if exist sid.txt del sid.txt
for /F "tokens=1" %%a in (【作業フォルダ】¥addusers_move.txt) do call 2.bat %%a
4.6. 以下のBATファイルを作業フォルダに作成して、2.batとして保存。
getsid ¥¥【旧サーバー】 %1 ¥¥【新サーバー】 %1 > getsid.txt
for /F "skip=1 tokens=5,7" %%a in (getsid.txt) do call 3.bat %%a %%b
4.7. 以下のバッチファイルを作業フォルダに作成し、ファイル名を3.batとして保存。
echo %1 %2 >>sid.txt
4.8. 1.BATを実行。→sid.txtが生成される。
4.9. 2行セットにて、旧サーバー情報、新サーバー情報が出力されるので
旧サーバーに関してはSIDを残し
新サーバーに関してはユーザ名(or グループ名)を残して保存。
4.10. 2行セットのデータから、下記の様なコマンドを生成。
subinacl /subdirectories D:¥【共有フォルダ名】¥*.* /replace=S-1-5-21-3991236707-3509720041-2108512118-1011="【左のSIDに対応したユーザ名orグループ名】"
4.11. 2行セットのデータから作ったコマンドのファイルの拡張子をbatに変更して
BATファイルとして実行。
参考にさせて頂いたWebとは4.10から違うのですが、もともとは参考Webサイトに沿って
準備を進めていたのですが・・・どうにも上手く行かず
結果的に1ユーザーor1グループ毎にコマンドを生成して
それを順次実行に落ち着きました。
ゼロから共有フォルダのアクセス権限を設定するよりも
遥かに効率的で間違いも起きません。大変助かりました。
参考Webサイト