読者です 読者をやめる 読者になる 読者になる

treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

(2/2)ストレージがないPCのハードウェア管理台帳を作りたい

昨日の「(1/2)ストレージがないPCのハードウェア管理台帳を作りたい」続きをご報告します。
昨日までで何をやろうとしているか、どういうものを使おうとしているか、というところまでを記事にしました。

起動用USBを作る。

実際に作成する方法は@ITで詳しく解説されています。
www.atmarkit.co.jp

この記事通りに実行するだけで起動用のWIndowsPE環境をインストールしたUSBが作成可能です。
いくつかポイントがあるとすると、作成完了後
「dism /unmount-wim /mountdir:%WinPEイメージパス%\mount /commit」
としてアンマウントしたあと、PEイメージを閉じるんですが、二回目にマウントしようとして
「dism /mount-image /imagefile:"%WinPEイメージパス%¥media¥sources¥boot.wim" /index:1 /mountdir:"%WinPEイメージパス%¥mount"」
とすると、エラーになってしまいました。(エラーは画面を取り忘れてちょっと忘れてしまいました。)
このとき「dism /cleanup-wim」コマンドを実行すると再度マウントができるようになりました。マウントできなくなったら一旦/cleanup-wimオプションでdismコマンドを実行するといいようです。

あとは、最小容量の256MBのUSBメモリを使って最低限のWindows PE環境を用意しようと思ったのですが、古いUSBメモリではPEイメージをUSBメモリに書き込む際にdiskpartコマンドで初期化する際にエラーでこけてしまうようです。
コマンド(※USBメモリがHドライブ)
「makewinpemedia /ufd %WinPEイメージパス% H:」
を実行すると、USBメモリに書き込むために自動的にdiskpartコマンドが動作するのですが、この動作が開始すると
ERROR Failed format diskpart errorlevel -2147024809」とメッセージを出してしまって処理がストップしてしまいます。どうやら、古いUSBメモリは容量以外でも使えないことがあるようです。

あとは、使おうとしているPCAssetはVB6ランタイムを要します。一方のWindowsPE環境ではPCAssetが動作するためのVB6ランタイム(.DLLファイル)が不足します。これはPE環境では最低限のDLLしか用意されていないことが理由でそのままでは動作しません。
そこでVB6ランタイムライブラリを別途ダウンロードし、PCAsset.exeと同一フォルダにVB6ランタイムの.DLLファイルを全部展開しておくと動作します。

バッチファイルで実行を楽にする。

いざWindowsPE環境が準備できたら、WindowsPE環境が起動直後はx:\Windows\System32がカレントディレクトリになるので、ここにバッチファイルを配置していきなり実行してしまおうと目論見ました。
ただし、PCAssetがコンピュータ名をファイル名やキーとしたファイルを生成してくれるのですが、WindowsPE環境では「MININT-%ランダム文字列%」というコンピュータ名になるので、PCAsset.exeを実行した後、「MININT-?????.tsv」というファイル名を手入力した名前にリネームするようにします。(人間が分かりやすいコンピュータ名にするということです。)あと、内蔵ストレージがないのでUSBメモリはC:\になること、およびUSBメモリのルートディレクトリに"C:\_MoveData\"ディレクトリを作成しておくこと、など諸々条件があるため、バッチファイルは参考までにご覧ください。
----------------------------------------------
@echo off
setlocal
x:\UserProgram\pcasset\PCAsset.exe

set PCNAME=
set FILENAMPATH=
set PCAFFP=
set FILENAM=
set DATADIR="C:\_MoveData\"

:GetFILENAME
set PCAFFP="C:\_MoveData\MININT-*.tsv"
set /p PCNAME="保存するファイル名(PC名)を入力します >"
Call :GETNAME %PCAFFP%
echo %FILENAM%を%PCNAME%.tsvに変更します。
pause
pushd %DATADIR%
REN %FILENAM% %PCNAME%.tsv
popd
dir %DATADIR% | more

set PCNAME=
set FILENAMPATH=
set PCAFFP=
set FILENAM=
set PCNAME=
Goto :EOF
:GETNAME
set FILENAM=%~nx1
----------------------------------------------

これだけ用意したら…

ここまででWindowsPEが起動します。
図:起動後の図

f:id:treedown:20160412102002j:plain

実際に作成したバッチファイルを実行してみました。DOS窓内でいい具合に動作している様が見えます。

あとは

  1. USBブートでPE環境を起動する
  2. PE環境起動後にバッチファイル経由でPCAsset.exeを実行
  3. (バッチファイル内で)生成したインベントリファイル名変更
  4. PE環境をシャットダウン、コマンドは「wpeutil shutdown」

これをPCの台数分繰り返したら収集作業は完了です。
USBメモリにインベントリファイルが溜まっていくようにしてますので、完了後USBメモリからインベントリファイルを収集して、そのデータからPC型番やシリアル番号などのWMI情報が一覧で取り扱えるようになります。

実際には、「パソコン管理台帳 for Access」この辺を使ってPCAssetで生成したtsvファイルを取り込んでデータを取り扱います。