UniDeploy:Windows標準機能でドライバーのエクスポート、インポート

概要

今回はインストール済のドライバーをエクスポート、インポートするBATです。
Windowsではコマンドプロンプト、PowerShellでいくつか方法があります。UniDeployでではコマンドプロンプトを基本としています。

起動中のWindowsからドライバーをエクスポートする

ここでは、エクスポート以外に、後作業を自動化する為の工夫をしています。

  • エクスポート時にWmicを利用して製品モデル名を取得してフォルダを作成する
  • フォルダ名称はスペースを取り除く
  • その過程でアンダースコアを一時利用して取り除いている

スペースを取り除く理由はフォルダ名でマッチングする作業が別の工程である為です。マッチング時にスペースでマッチングミスが発生しない無いようにしています。

下記の内容をBATとして保存してください。
基本的にこれからのBATの文字コードはANCI推奨です。

BAT (Batchfile)
@echo off

rem 製品モデル名をマシンから取得、スペースを取り除きフォルダを作成
set "model="
for /f "skip=1 delims=" %%a in ('wmic computersystem get model') do if not defined model set "model=%%a"
set "model=%model: =%"
set "model=%model:_=%"
md "C:\Drivers\%model%"

rem DismコマンドでOnlineのWindowsからドライバーをエクスポート。
dism /online /export-driver /destination:"C:\Drivers\%model%"
pause

この検証機器はDellのOptiPlex3050です。wmic computersystem get modelを実行するとOptiPlex 3050と表示されて、作成されたフォルダでは、OptiPlex3050とスペースが削除されていることが分かります。

未実装機能(検討中)

本当は、このエクスポート時にドライバーのクラスごとにフォルダでまとめたいと考えています。私の環境だと完璧にはフォルダ分けが出来ませんでした。原因はドライバーファイルに書かれているクラスの書き方です。書き方がメーカーによって多少文字揺れがあるのです。そのパターンを網羅できるスクリプトに書き悩んでいます。

起動中のWindowsへドライバーをインスポートする

エクスポートしたファイルをそのままインポートしてみましょう。

前工程で C:\Driver\ の中に製品モデル名のフォルダ名を作成し、起動中のWindowsからドライバーを全てエクスポートしました。

エクスポートと同様に、実行マシンの製品モデル名を取得する

取得した製品モデル名と同じフォルダをが C:\Driver の中にある場合はサブフォルダ含めた全てのドライバーをインポートする。フォルダがない場合には Folder not found を表示する

下記の内容をBATとして保存してください。
基本的にこれからのBATの文字コードはANCI推奨です。

BAT (Batchfile)
@echo off
set "model="
for /f "skip=1 delims=" %%a in ('wmic computersystem get model') do if not defined model set "model=%%a"
set "model=%model: =%"
set "model=%model:_=%"

set "source_folder=C:\Driver\%model%"

rem 実行しているマシンから製品モデル名を取得し、指定したPATH内にその製品モデル名と同じフォルダがあればそのフォルダ内の全てのドライバーをインポートする
if exist "%source_folder%" (
    pnputil.exe /add-driver %source_folder%\*inf /subdirs /install
) else (
    echo "Folder not found."
)
pause

今回はOnlineのWindowsで実行するコマンドでした。
この先では、offlineのWindowsへのインポートを使ってイメージ展開の後に自動でドライバーをインストールするというシーンがあります。このステップではonline、offlineでコマンドが違うんだなという程度の理解で構いません。