Mr.S(shinoda)
タイトル | BAT MAC Ver. 0.10 |
動作環境 | Win98 || WinNT4.0 || Win2K |
書庫内容 | BAT_MAC.TXT , BAT_MAC.HED , BAT_MAC.EXE |
転載 | ドキュメント内に記載されている条件内で自由 |
作者 | Mr.S (Shinoda System Products) |
使用方法 | BAT_MAC.TXT を参照してください。 |
各種設定やログオン時の処理を、バッチファイル等を用いて自動化している管理者さんは、結構多いのではないでしょうか。そこで、問題となるのが、個々のパソコン毎に違う処理をしたい時の対処法です。「バッチファイル上で機種判別ができればどれだけ便利だろうか」と考えた管理者さんは少なくないでしょう。作者(Mr.S)もそのうちの一人です。
GUIでMACアドレスを調べたり、単にMACアドレスを表示(STDOUTに出力)するだけのソフトは結構多いのでしょう、しかし、それを利用して処理を自動化できるソフトは、なかなか見つからないですね。
一般的に、LANカードのMACアドレスはユニークな(同じ値が2つ以上無い)アドレスです。したがって、パソコンに刺されているLANカードのMACアドレスを調べることにより、そのパソコンを特定する(以下、機種判別)ことが出来ます。
機種判別をするには、他にCPUのIDを用いる方法もありますが、その機能を備えていない環境も結構多いのではないでしょうか。それに比べ、機種判別を必要とする環境では、LANカードが刺さっているケースがほとんどではないでしょうか。この理由を考慮し、今回は、機種判別にMACアドレスを用いることにしました。
このソフトでは、MACアドレスから、1?255までの任意の数への変換テーブルを作成し、その数をERRORLEVELとして返します。BATファイル上で、このERRORLEVELに応じた処理をすることにより、機種判別による自動処理を実現できます。
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -P C:\CHEE'S\> |
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -P -L 0 C:\CHEE'S\> |
-P
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -J -F RIKA.DAT -C MAMI.CSV
C:\CHEE'S\> |
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -K -F RIKA.DAT -C MAMI.CSV
C:\CHEE'S\> |
この話を聞いて「ピン」とこない人は、指定しない方が無難でしょう。
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -P LANA(0) : 00:80:c8:49:1c:09 LANA(1) : 00:80:c8:49:1c:09 LANA(2) : 00:80:c8:49:1c:09 LANA(3) : 00:00:00:00:00:00 MASK : ff:ff:ff:ff:ff:ff C:\CHEE'S\> |
※ LANA番号は、CSVファイルには保存されません。従って、上の例のようになった場合、0?2のどのLANA番号を選んでも、結局MACアドレスは同じなので、適当なLANA番号を指定しても構いません。
次に、MACアドレスをCSVファイルに登録します。書式は次のようになります。
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -A 123 -C MAMI.CSV
-L 0 C:\CHEE'S\> |
次に、CSVファイルを編集します。編集する内容が無ければ、編集しなくても構いません。編集するには、表計算ソフトやカード型データベースソフト等のCSVファイルが編集可能なソフトを使います。また、このソフトが出力するCSVファイルは、テキストエデッタでも見やすいようなレイアウトで出力されますので、Notepad(メモ帳)などで編集しても構いません。
ファイルのレイアウトは、1列目に返すERRORLEVEL、2列目にMACアドレスになります。
最後に、編集後のCSVファイルを専用のデータベースファイルに変換します。 書式は次のようになります。
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -J -C MAMI.CSV -F RIKA.DAT C:\CHEE'S\> |
この時、RIKA.DATは上書きします。追加ではありませんので、注意して下さい。
まず、EXCELなどの、CSV形式で出力が出来るソフトを立ち上げます。
次に、1列目に返すERRORLEVEL、2列目にMACアドレスになるように表を作ります。
この時のファイルフォーマットについては、次の章で述べます。
そして、その表をCSV形式で出力して下さい。
最後に、前回説明したのと同様にCSVファイルからデータベースファイルに変換します。
例えば、MAMI.CSVからRIKA.DATに変換したい場合は、次のようなオプションで実行します。
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -J -C MAMI.CSV -F
RIKA.DAT C:\CHEE'S\> |
まず、前回、CSVファイルにMACアドレスを追加した時と同様に、登録するMACアドレスのLANA番号を調べて下さい。
次に、どのERRLEVELで登録するか決めます。
登録する時のオプションは、以下のようになります。
BAT_MAC -A [返すERRORLEVEL] -F [保存するデータベースファイル名] -L [LANA番号]
例えば、LANA番号が0のMACアドレス(00:80:c8:49:1c:09)が見つかったときに、ERRORLEVEL を 123 と返すようにするとき、データベースファイル、RIKA.DATに保存したい場合は、次のようなオプションで実行します。
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -A 123 -F RIKA.DAT
-L 0 C:\CHEE'S\> |
このとき、RIKA.DAT が存在しない場合は新規作成し、既に存在している場合は、データの最後に追加されます。
BAT_MAC -S -F <データベースファイル名>
例えば、RIKA.DATの内容を元にMACアドレスを判定するなら、次のようなオプションで実行します。
C:\CHEE'S\ |
C:\CHEE'S\> BAT_MAC -A 123 -F RIKA.DAT -L
0 C:\CHEE'S\> BAT_MAC -S -F RIKA.DAT BAT MAC Version 0.71 detect 123 (00:80:c8:49:1c:09) C:\CHEE'S\> |
C:\CHEE'S\ |
C:\CHEE'S\> @BAT_MAC -S -F RIKA.DAT > NUL C:\CHEE'S\> |
sample1.bat |
@ECHO OFF
bat_mac -f rika.dat -s > NUL IF ERRORLEVEL==1 GOTO MACHINE1
echo このパソコンは、登録されていますが、なにもしません。 GOTO EXIT
:MACHINE2
:MACHINE3
:NOTFOUND
:EXIT
|
まずは、sample2.bat について説明しましょう。
次の例は、まず、ASAMI.DATを検索し、見つからなかった場合はTOMO.DATを、次にMEGU.DATをそれでも見つからなかった場合は、その旨を表示します。
sample2.bat |
@ECHO OFF
bat_mac -f asami.dat -s > NUL IF ERRORLEVEL==1 GOTO ASAMI1
GOTO EXIT :TOMO
IF ERRORLEVEL==1 GOTO TOMO1
GOTO EXIT :MEGU
IF ERRORLEVEL==1 GOTO MEGU1
GOTO EXIT :ASAMI1
:ASAMI2
:ASAMI255
:TOMO1
:TOMO2
:TOMO255
:MEGU1
:MEGU2
:MEGU3
:NOTFOUND
:EXIT |
次に、sample3.bat について説明しましょう。
この方法を理解するには、マスクの概念を理解できていて、かつ、自分の管理化にあるパソコンのMACアドレスの分布を把握していなくてはなりません。
以上2つの条件に合致しない場合は、この方法をおすすめしません。
次の例は、まず、検出したMACアドレスの下位2BITのみ取り出し、その結果より、それぞれ別々のデータベースファイルから検索しなおします。まず、下の例の前提条件として、例で使用するMACアドレスとを以下のようにします。
MACアドレス | マシン名 |
12:34:56:78:90:00
12:34:56:78:90:28 12:34:56:78:90:45 12:34:56:78:90:7D 12:34:56:78:90:52 12:34:56:78:90:36 12:34:56:78:90:CB 12:34:56:78:90:2F |
新井利佳1
新井利佳2 上田愛美1 上田愛美2 藤岡麻美1 藤岡麻美2 篠原由美子1 篠原由美子2 |
上の例の場合、データベースファイルの登録内容を以下のように構成します。
RIKA.DAT
1 , 12:34:56:78:90:00
2 , 12:34:56:78:90:28
AIMI.DAT
1 , 12:34:56:78:90:45
2 , 12:34:56:78:90:7D
MAMI.DAT
1 , 12:34:56:78:90:52
2 , 12:34:56:78:90:36
YUMIKO.DAT
1 , 12:34:56:78:90:CB
2 , 12:34:56:78:90:2F
以上の条件を前提に、sample3.bat を理解して下さい。
sample3.bat |
@ECHO OFF
bat_mac -f chees.dat -s -m 00:00:00:00:00:03 > NUL IF ERRORLEVEL==1 GOTO RIKA
:RIKA
IF ERRORLEVEL==1 GOTO RIKA1
:AIMI
IF ERRORLEVEL==1 GOTO AIMI1
:MAMI
IF ERRORLEVEL==1 GOTO MAMI1
:YUMIKO
IF ERRORLEVEL==1 GOTO YUMIKO1
:RIKA1
:RIKA2
:AIMI1
:AIMI2
:MAMI1
:MAMI2
:YUMIKO1
:YUMIKO2
:EXIT
|
sample4.bat |
@ECHO OFF
bat_mac -f chees.dat -s > NUL IF ERRORLEVEL==0 GOTO EXIT
regedit /s C:\CHEE'S¥REG_FILE\REG.%ERRORLEVEL% GOTO EXIT :REGDEFAULT
:EXIT
|
1
|
11:22:33:44:55:66 |
2
|
66:55:44:33:22:11 |
10
|
12:34:56:78:9A:BC |
255
|
FF:EE:DD:CC:BB:AA |
1レコードのファイルレイアウトは、1バイト目がERRORLEVEL、2バイト目が予約で、必ず0、3バイト目から8バイト目までは、MACアドレスになります。そして、このデータが登録してあるMACアドレスの数だけ続きます。
例えば、以下のCSVファイルをデータベースファイルに変換すると、次のようになります。
1
|
11:22:33:44:55:66 |
2
|
66:55:44:33:22:11 |
10
|
12:34:56:78:9A:BC |
255
|
FF:EE:DD:CC:BB:AA |
+0
|
+1
|
+2
|
+3
|
+4
|
+5
|
+6
|
+7
|
+8
|
+9
|
+A
|
+B
|
+C
|
+D
|
+E
|
+F
|
|
0000
|
01
|
00
|
11
|
22
|
33
|
44
|
55
|
66
|
02
|
00
|
66
|
55
|
44
|
33
|
22
|
11
|
0010
|
0A
|
00
|
12
|
34
|
56
|
78
|
9A
|
BC
|
FF
|
00
|
FF
|
EE
|
DD
|
CC
|
BB
|
AA
|
この説明を読んでも意味が分からない場合は、データベースファイルの直接編集をしない方が無難です。