調べて、学ぶ

検索したり実験したことを覚えとくブログ

DISMのコマンドラインを教えるのが面倒なのでGUIを作ったハナシ

windowsのイメージキャプチャはwindowsでできる

はじめから何言ってんだ?と思われそうなタイトルですが、仕事柄たくさんのPCをキッティングすることがあり、イメージキャプチャツールは必須なのです。 有名どころだとacronis trueimageとか(昔なら)norton ghostとか。

でもご存じ? それって、たとえブータブルメディアの利用でも「対象PCの台数分のライセンス」がいるんですよ?

1台のライセンスが仮に5000円としても、100台買ったら50万円。「キッティングのときだけ使い切り」のライセンスは数百円/台だけど、PC壊れてまたキッティングしますって時にまたライセンスが発生するので何台用意すればいいんだか。

というわけでお金のかからないイメージングツールを探してたのですが、なんだかんだでMicrosoft謹製のDISMで落ち着きました。

DISMって

知ってる人はすっ飛ばしてかまわない部分。

  • windowsの標準についている機能としては/scanhealthくらいしか使わない(それだって余り役に立たない)
  • windowsPE作成時に付与されるDISMの機能として「/capture-image」「capture-ffu」がある。
  • 違いはここ参照。
  • すでに職場の先達が試していて、処理速度は遅い(特にイメージング。リストアは速い)。なので、圧縮オプションは使わない
  • コマンドのパラメータがやたら長い。

主題

DISMコマンドでバックアップ・リストアをすることを人に伝える&やらせるのが面倒->なのでGUIで入力補助してやろう。

やること

  • dism のコマンド入力負担をなるべく減らす
  • 2つのキャプチャ方法のうち、.ffu形式を利用する。(wim形式はパーティションが分かれているPCだとパーティションの数だけ実行しなければならないため面倒)
  • 基本はマウス操作でボタンクリック→キャプチャ/リストアできるけど、使用者の学習のためにコマンドラインも表示する(トラブったらコマンドラインで実行してもらう)
  • 慣れているという理由でGUIhtaで作る。
  • 前提としてscript,hta,wmic,powershellをサポートするwindowsPEメディアが必須(詳細はググってください)

ちなみにこれを作る途中で知ったけどpowershellでDISMのGUI版を作ったツワモノがいた。これを日本語訳した方が早かったかもしれない

ffu形式のキャプチャについて

本来のコマンドは以下の通り

dism /capture-ffu /capturedrive=\\.\physicaldrive0 /ImageFile=(保存先ドライブ):\(ファイル名).ffu /name:"(このファイルの識別名)" /description:"(説明文。なくてもOK)"

ffu形式のリストアについて

本来のコマンドは以下の通り

dism /apply-image /imagefile:(リストアする.ffuのフルパス) /appplydrive:\\.\physicaldrive0 

...長い。コマンドはdism(たった4文字)なのに、パラメータの長さよ。

GUIにするにあたって

パラメータを一つずつ画面パーツに落とし込む。

  • ラジオボタンで /capture-ffu、 /appyimage、/drvload(winPE環境へのドライバインストール。ついでに作成) を選択
  • 物理ディスク一覧を列挙・選択する画面の描画(physicaldriveXを選択するため)
  • 保存先ファイルダイアログの画面→htmlでは無理っぽいと判断してpowershell使用
  • テキストボックスでnameとdescriptionを入力
  • 上記の内容からコマンド文字列を合成して実行
  • リストア時は.ffuファイルを選択するためのファイル選択ダイアログを使用
  • 画面だけになってコマンド(実態)が忘れ去られないように合成したコマンドラインも表示しておく(デバッグ用。これをコピペしてコマンドプロンプトで実行したらなにかわかるかも)

というわけでこんなものを作ってwindowsPEから起動するように仕込んだ。

dismをGUI化した画面

いちおう動作確認したので、windowsでもwindowsPEでもダイジョブっぽい。 さて職場の評判はどうなることやら。