「BAT MAC」+「SYSDIFF」で、

複数台のパソコンを手抜き再インストール

目次

初めに
BAT MAC とは
SYSDIFF とは
ハードディスクをバックアップする
SYSDIFF で差分ファイルを作成してみよう
更に便利なリストア環境の作成
最後に

初めに

 この記事の内容は、同一のハードウェア構成のパソコンが複数台ある環境で、かつ、 定期的もしくは頻繁に再インストールが必要な環境の管理者さん等を対象に書いてあります。 ハードウェアーが統一されていない環境や、パソコンが1,2台の環境では、 あまり意味が無いかもしれません。
 また、この記事では、PowerQuest社の Drive Image CD-R2000 と WindowsNT 4.0 Workstation を利用した例で書かれています。それ以外の環境では、 必要に応じて記事の内容を読み替えてください。
 この記事の内容は未保証です。 この記事によって生じたあらゆる障害、損害に対して当方は 責任を負いません

BAT MAC とは

 BAT MAC は、私(Mr.S)が作成したフリーソフトウェアで、 パソコンに挿入されているネットワークカードのMACアドレスを判定することができます。
 MACアドレスは、OSの再インストールなどで変化するものではなく、更に、 一般的に同じMACアドレスを持つネットワークカードは無いので、 パソコンを特定することができます。
 MACアドレスの判定は、「 BAT MAC取扱説明書」を参照してください。 また、 BAT MAC本体は、 VECTORの私のページよりダウンロードできます。

SYSDIFF とは

 SYSDIFF とは、MicroSoft社が提供しているシステムの差分を取るためのツールです。 このツールは、主にOEM用にカスタマイズされたNTのインストールディスクを作成するとき等に使われています。
 具体的には、ファイルの差分、レジストリの差分などを(ユーザープロファイル上のものを除く) ファイルに保存することができるツールで、変更箇所が少ない場合は、 数キロバイト程度の差分ファイルになります。
 今回の記事では、あらかじめCD-Rなどにバックアップしておいたベース環境から、 個々のパソコンにカスタマイズされた環境への差分を作成し、リストア後にパソコンを自動認識させ、 そのパソコン用の差分ファイルをSYSDIFFによって適用させます。
 SYSDIFF+SETUPMGRでも、同様のことができますが、この方法には、 以下のような欠点があります。
 この記事のやり方では、DriveImageで、Disk単位でリストアした後に、 SYSDIFF で必要なファイルのみ書き換えますので、上記のような欠点は改善されます。
 SYSDIFFの入手方法に関しては、SYSDIFF で差分ファイルを作成してみようSYSDIFF の準備と SYSDIFF.INF の修正 を参照してください。

ハードディスクをバックアップする

全パソコン共通仕様のベース環境を作る

 まず、全パソコン共通仕様のベース環境を作ります。ここでいうベース環境とは、必要なアプリケーションなどをインストールし、コンピュータ名やIPアドレス等の個々のパソコンによって違う設定項目等を除く全ての設定を終えた環境のことを指します。つまり、後は、個々のパソコンによって違う環境を設定するだけで動く状態のことです。
 また、細かく作り込みたい場合は、レジストリのキーの状態や、Default User のプロファイル等の設定にも注意しましょう。

ハードディスクをバックアップ

 今回は、バックアップにPowerQuest社のDrive Image CD-R2000 を利用しました。このソフトを利用した理由は、バックアップ速度が速いことや、ブータブルCDでリストアできることもありますが、MS-DOS環境から直接CD-Rに書き込めることが1番の理由です。つまり、バックアップする環境に、CD-R,SCSIのドライバや、ライティングソフトをインストールする必要が無いため、バックアップしたデータの中に、CD-R関連のものを含めないことができるのです。
 とりあえず、どんなバックアップソフトを利用してもかまいませんので、お好きなソフトをご利用ください。

SYSDIFF で差分ファイルを作成してみよう

SYSDIFF の準備と SYSDIFF.INF の修正

 まずは、SYSDIFを用意しましょう。私は、Windows NT 4.0 Workstation のDisk2の「\SUPPORT\DEPTOOLS\I386」フォルダに格納されているものを利用しました。その他にも、リソースキット等いろいろな所に格納されていますので、確認してみてください。また、英語版の最新版はマイクロソフトのftpサイト ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/nt40/utilities/sysdiff-fix/ よりダウンロード(自己解凍)できますので、バグ等により、最新版を使いたい場合や、SYSDIFFが発見できない場合はこちらをダウンロードして下さい。
 必要なファイルは、「SYSDIFF.EXE」と「SYSDIFF.INF」です。この二つのファイルを適当なフォルダにコピーして準備は完了です。(CD-ROMからコピーした場合は、SYSDIFF.INFの読取専用属性を外しましょう)
 次に、SYSDIFF.INF を編集します。このファイルには、SYSDIFF の設定項目が記述されています。編集するには、メモ帳などのテキストエデッタで開いてみてください。先頭に、[Version] というセッションがあると思いますが、こちらは変更しないで下さい。次のセッションは、[ExcludeDrives]
だと思いますが、こちらは、ファイルの差分を取るときに除外するドライブを列挙します。たとえば、DドライブとFドライブを省きたい場合は以下のようにします。
SYSDIFF.INF
[ExcludeDrives]
d
f

 ちなみに、私の場合は、レジストリのみの差分で構わなかったので、[ExcludeDrives] のセッションでは、* を指定しました。
SYSDIFF.INF
[Version]
Signature = "$Windows NT$"

[ExcludeDrives]
*

[ExcludeDirectoryTrees]

[ExcludeSingleDirectories]

[ExcludeFiles]

[IncludeFilesInDir]

[ExcludeRegistryKeys]
HKLM,System\Disk
HKLM,System\Select
HKLM,System\Setup
HKCU,Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

[ExcludeRegistryTrees]
HKLM,SYSTEM\ControlSet001
HKLM,SYSTEM\ControlSet002
HKLM,SYSTEM\ControlSet003
HKLM,SYSTEM\ControlSet004
HKLM,SYSTEM\ControlSet005
HKLM,SYSTEM\ControlSet006
HKLM,SYSTEM\ControlSet007
HKLM,SYSTEM\ControlSet008
HKLM,SYSTEM\ControlSet009
HKLM,SYSTEM\CurrentControlSet\Enum
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\perflib"

[ExcludeRegistryValues]


 この他にも、いろいろなオプションがあります。ExcludeXXXXになっているセッションは、検査を省くレジストリやファイル等の指定するセッションです。実際の「SYSDIFF.INF」ファイルには、日本語のコメントが書いてあると思いますので、そちらを参考にしてください。

スナップショットの作成

 はじめに、「スナップショット」とは何かについて説明します。「スナップショット」と聞いて、chee's の 1stシングルを思い浮かべる人もいるかも知れませんが、実は、chee'sとは関係ありません。「スナップショット」とは、現在のシステムのイメージをファイルに保存する作業のことで、差分ファイルを出力する際には、スナップショットで作成したイメージと、それぞれのパソコン用に設定を変更した環境を比較し、その差分を出力します。
 スナップショットを作成する前に、ハードディスクをバックアップする前に作成したベース環境にしてください。ベース環境に戻すことが困難な場合や、「安全第一」な人は、先ほどバックアップしたCD-Rからリストアしてみてください。
 この状態で、スナップショットを取りましょう。スナップショットを出力する時のコマンドラインオプションは以下のとおりです。
SYSDIF /SNAP [出力するスナップショットイメージのファイル名]
 例えば、"snapshot.img" というファイル名で保存したい場合は、コマンドラインから以下のように打ってみてください。
D:\CHEE'S\
D:\CHEE'S\> SYSDIFF /snap D:\CHEE'S\snapshot.img
D:\CHEE'S\>
  上の例に従って実行すると、以下のようなウィンドウが表示されます。

 スナップショットイメージの出力が完了すると、 完了したことを示すダイアログが表示されますので、その後、SYSDIFF を終了させて下さい。

個々の環境を作成

 次に、先ほどスナップショットを取ったベース環境を変更し、 個々の環境を作成しましょう。
 ここでいう個々の環境とは、IPアドレス、コンピュータ名等の、 各パソコンによって違う設定項目のことです。例えば、IPアドレスを "254.004.007.012"(クラスH???)に、コンピュータ名を"chee's"に設定したいなら、 ネットワークのプロパティより設定を変更してみて下さい。
 設定項目によっては、「再起動」を要求してくるものがありますが、 「再起動しないと、設定は反映されないが、設定内容は保存されている」 というものが殆どです。再起動が本当に必要かどうかは、各自確認して下さい。
 全ての設定を変更後、次のステップである「差分ファイルの作成」を行います。

差分ファイルの作成

 ここで言う差分ファイルとは、ベース環境から設定を変更した後のシステムの状態と、先ほどスナップショットを取ったイメージを比較し、その変更個所のみを差分としてイメージ化した差分ファイルのことです。

 この状態で、スナップショットを取りましょう。スナップショットを出力する時のコマンドラインオプションは以下のとおりです。
SYSDIF /DIFF [比較するスナップショットイメージのファイル名] [出力する差分イメージのファイル名]
 例えば、"snapshot.img" と現在のシステムの状態を比較し、その結果を "diff.img" というファイル名で保存したい場合は、コマンドラインから以下のように打ってみてください。
D:\CHEE'S\
D:\CHEE'S\> SYSDIFF /diff D:\CHEE'S\snapshot.img diff.img
D:\CHEE'S\>
  上の例に従って実行すると、以下のようなウィンドウが表示されます。
 これで、差分出力完了です。複数台の環境を作るには、この差分を必要台数分作らなければなりません。 ベース環境のスナップショットは、もう既に取ってありますので、この調子でどんどん差分ファイルを作成して下さい。 出力する差分ファイルのファイル名ですが、拡張子やファイル名に、1から255の数字を含めておくと便利です。 例えば、「image.1 , image.2 , image.255」や、「diff1.img , diff2.img , diff255.img」等です。 次節以降では、「image.255」のスタイルで説明します。 なぜこうしておくと便利かというと、次節以降を見てもらえればわかると思います。

BAT MAC 用データベースファイルの作成

 ここで言うデータベースファイルとは、パソコンを判別するための、MACアドレスから任意の数への変換テーブルのことです。この節と次節では、下の表を例にして説明しましょう。
 下の表は、4台のパソコンを配置したことを例とし、それぞれのMACアドレスを下表のように仮定し、それぞれのMACアドレスに対するERRORLEVELと差分ファイル名を適当に決めたものである。
 
パソコン名 MACアドレス ERRORLEVEL 差分ファイル名
RIKA 00:11:22:33:44:55 4 chees.4
AIMI 01:23:45:67:89:AB 7 chees.7
MAMI AA:BB:CC:DD:EE:FF 12 chees.12
YUMIKO 88:88:88:88:88:88 255 chees.255
 ERRORLEVELとは、プログラムがOSに返す戻り値のことで、この戻り値により、 プログラムがどのように終了したかを知ることができます。 今回は、そのERRORLEVELを、どのパソコンが検出されたかを表すコードとして利用しています。
 このコードには、1〜255までの任意の数を適当に割り当て下さい。 また、エラーの場合や、検出されなかった場合には、0が返されます。
 それでは、早速データベースファイルの作成の話題に移りましょう。 作成する方法として、「T:CSVファイルを作成し、それをデータベースファイルに変換する方法」、 「U:現在のパソコンのMACアドレスをCSVファイルに追加登録し、それをデータベースファイルに変換する方法」、 「V:現在のパソコンのMACアドレスをデータベースファイルに直接追加登録する方法」
 以上のどの方法を用いても構わないのですが、3の方法は、データ整理に不便なので、あまりお勧めはしません。 今回はUの方法で説明しましょう。詳しい説明に関しては、ここでは割愛させていただきますので、 「BAT MAC 取扱説明書」の「MACアドレスを変換テーブル(データベースファイル)に登録する」の章を参照してください。
  まず、登録したいパソコンの電源を投入し、Windowsを起動します。そこで、コマンドプロンプトを立ちあげて下さい。 例えば、このパソコンが「RIKA」だったとしましょう。まず、コマンドラインから以下のように入力して下さい。
C:\CHEE'S\
C:\CHEE'S\> BAT_MAC -P
LANA(0) : 00:11:22:33:44:55
LANA(1) : 00:11:22:33:44:55
MASK : ff:ff:ff:ff:ff:ff 
C:\CHEE'S\>
 これが、RIKAに設定されているLANA番号と、そのLANA番号に割り当てられているLANカードのMACアドレスの一覧です。
 それでは、LANA番号=0のLANカードのMACアドレスを、ERRORLEVEL=4としてCHEE'S.CSVに登録してみましょう。
C:\CHEE'S\
C:\CHEE'S\> BAT_MAC -A 4 -C CHEE'S.CSV -L 0
C:\CHEE'S\>
 このとき、CHEE'S.CSV が既に存在していた場合は最後の行に追加されます。新規に登録したい場合は、あらかじめCHEE'S.CSVを削除しておいてください。
 それでは、MACアドレスを登録したいパソコンにWindowsがインストールされていない場合はどうすればよいのでしょうか。
 今回は、新たにOSをインストールする前のパソコンとして、「YUMIKO」を導入したと仮定しましょう。YUMIKOのMACアドレスは事前に調べておいてください。どうしてもMACアドレスがわからない場合は、あきらめてWindows98でもNTでも何でも構わないのでインストールしましょう。
 先ほど作成したCHEE'S.CSVをEXCEL等のCSVファイルが編集可能なソフトで開いてみてください。以下のように表示されるはずです。
 
4 00:11:22:33:44:55
7 01:23:45:67:89:AB
12 AA:BB:CC:DD:EE:FF
 ここで、YUMIKOのMACアドレスを追加してやればよいだけです。また、「BAT MAC」が出力するCSVファイルは、テキストエデッタでも読みやすいようになっていますので、メモ帳などで編集しても構わないでしょう。
CHEE'S.CSV
4 , 00:11:22:33:44:55
7 , 01:23:45:67:89:AB
12 , AA:BB:CC:DD:EE:FF
 
 そして、最後に全てのMACアドレスを登録したCSVファイルから、データベースファイルに変換します。例えば、「CHEE'S.CSV」から「CHEE'S.DAT」に変換するには、コマンドラインから以下のように入力して下さい。
C:\CHEE'S\
C:\CHEE'S\> BAT_MAC -J -C CHEE'S.CSV -F CHEE'S.DAT
C:\CHEE'S\>
 「CHEE'S.DAT」が出力されれば、これで完了です。
 
 ※CHEE'Sの皆さんは、iMacを利用しています。Windowsではありません

自動環境設定バッチの作成

 バッチファイルの作成に入る前に、「BAT MAC」によるパソコンの識別方法と、「SYSDIFF」による差分ファイルの適用方法を説明しておきましょう。 
「BAT MAC」によるパソコンの識別方法
 「BAT MAC」でパソコンを識別するには、前節で作成したデータベースファイルを使います。MACアドレスが登録されているパソコン上で、以下のように入力してみてください。
 
C:\CHEE'S\
C:\CHEE'S\> BAT_MAC -S -F CHEE'S.DAT
BAT MAC Version 0.71
detect 4 (00:11:22:33:44:55)
C:\CHEE'S\>
 上の画面は、「RIKA」で実行した場合の例です。上のような表示が出れば成功です。
 それでは、detect された「4」という数字をどう処理すればよろしいのでしょうか。detect された数字は ERRORLEVEL として OS に返されます。NT系の場合は、さらに、ERRORLEVEL という環境変数にセットされます。環境変数にセットされたERRORLEVELを表示するには、以下のようにします。
C:\CHEE'S\
C:\CHEE'S\> BAT_MAC -S -F CHEE'S.DAT
BAT MAC Version 0.71
detect 4 (00:11:22:33:44:55)
C:\CHEE'S\>
C:\CHEE'S\>ECHO %ERRORLEVEL%
4

C:\CHEE'S\>
 これを応用すれば、「SYSDIFF」の自動実行が可能というわけです。
 なお、Win95系は、この環境変数がセットされません。バッチファイルの組み方に関しては、「BAT MAC 取扱説明書」の「BATファイルの例」及び、「NT系のCMDの場合の秘技」を参照してください。
「SYSDIFF」による差分ファイルの適用方法
 「SYSDIFF」で差分ファイルを適用するには、コマンドラインから以下のように入力して下さい。
C:\CHEE'S\
C:\CHEE'S\> SYSDIFF /APPLY
C:\CHEE'S\>
 変更個所が少ない場合は、一瞬で終了してしまいます。成功しているかどうかを確認したい場合は
、設定が正常に反映されていることを確認してください。 
 ちなみに、SYSDIFFの差分イメージには、変更前の状態に関するレジストリ情報が含まれていません。この文の意味が理解できる人は、自己の責任において遊んでみてください。
自動環境設定バッチの作成
 いよいよ最終段階の自動環境設定バッチの作成について説明します。バッチファイルの作成に慣れた人は、今更説明は不要かもしれませんね。
 まずは、いきなりサンプルソースから。
sample.bat
@ECHO OFF
rem MACアドレスの判別
bat_mac -f chees.dat -s > NUL

rem 判別できなかった場合は終了
IF ERRORLEVEL==0 GOTO EXIT

rem 差分ファイルが見つからない場合は、デフォルトの差分ファイルを

if not exist C:\CHEE'S¥chees.%ERRORLEVEL% goto APPLYDEFAULT

rem 判別できなかった場合は終了
sysdiff /apply C:\CHEE'S¥chees.%ERRORLEVEL%
GOTO EXIT

:APPLYDEFAULT
rem C:\CHEE'S¥chees.def存在する場合は、それを適用、見つからない場合は、終了
if not exist C:\CHEE'S¥chees.def goto EXIT
sysdiff /apply C:\CHEE'S¥chees.def
GOTO EXIT

:EXIT
 
 サンプルソースとそのコメントを読んでもらえば、説明するまでも無いでしょうが、簡単にバッチの流れだけ説明しておきます。
 初めの「bat_mac -f chees.dat -s >NUL 2>NUL」 で、MACアドレスを検出し、ERRORLEVELをセットします。
 次に、「IF ERRORLEVEL==0 GOTO EXIT 」では、エラーレベルが0の場合、つまり、どのコンピュータも認識できなかった場合に、終了するようにしています。
 それ以降のルーチンでは、「chees.[検出されたエラーレベル]」という名前のファイルが存在すれば、その差分ファイルを出力し、存在しない場合は終了します。
 まあ、説明といっても、こんな感じですね。

更に便利なリストア環境の作成

 今から説明する内容は、環境によって作業の内容が変わります。そのため、この章では具体的な内容はあえて説明しません。
 この記事で説明したシステムでは。リストア後に、環境を反映する作業をしなければなりません。まずは、環境の反映を効率的に行う方法を説明しましょう。
 前章までに説明してきたシステムでは、リストア後に「SYSDIFF」、「BAT MAC」、その他環境反映に必要なシステムがインストールされたディスクを挿入しなければなりません。この手間を省くには、このシステムの内容ごとハードディスクにインストールしてからバックアップを取ればよいのです。そうすれば、ディスクの交換する必要が無くなりますね。
 ここまでできると、次に、何とかこのシステムを自動実行したくなりますね。Administrator権限の付いたユーザーを自動ロクインにしておいて、そのユーザーのスタートアップに、このシステムへのショートカットを置いておけば良いでしょう。そして、SYSDIFFで、オートログインを解除するような差分を適用し、そのバッチファイルから、ショートカットを削除すれば良いでしょう。
 SIDについてですが、この方法だと、どうしてもSIDが重複してしまいますね。SIDが重複すると不都合が生じる環境の人は困りますね。そこで、Sysinternals(本家はここ) が無料で公開しているNewSIDというすばらしいツールがありますので、これを使いましょう。このツールを使えば、SIDを新たに生成する事ができます。NewSIDを実行する際、/A オプションを指定することにより、自動実行することができます。
 なお、この章に書いてある内容は、覚え書き程度と認識して下さい。完璧なリストア環境を実現させるには、各自の実験と試行錯誤が必要です。  

最後に

 Windows2000 や WindwosMe が主流になり、XPの発売が近い今でも、結構 WindowsNT 4.0 を使っている環境って結構多いんですよね。
 私の学校もそんなかんじなのですが、出入りしている業者が「メンテフリー」にするために、めちゃくちゃなアクセス権の設定にしているため、ワトソン博士が落ちたこともありました。しかも設定は手抜きで、モニタは800×600(60Hz)で使わされています。ひょっとして、保守料金をケチったのかなと勝手な想像をしています。
 やっぱり、NT4 は素直なので私は好きです。
 NT に関しては、今後も、プロファイル関連、セキュリティ(アクセス権)関連、リソースキット関連、ポリシー、テンプレート関連等の、個人ユーザーにはあまり縁の無い部分のノウハウを紹介したいなとは思っているのですが、私はプログラマなので、何か自作ソフトと絡めないと気が済まないのです。というわけで、今後の記事に関しては、期待せずにお待ちください。


この記事に関するリンク 関連リンク