起動中のWindowsからドライバーをエクスポートする
ここでは、エクスポート以外に、後作業を自動化する為の工夫をしています。
スペースを取り除く理由はフォルダ名でマッチングする作業が別の工程である為です。マッチング時にスペースでマッチングミスが発生しない無いようにしています。
下記の内容をBATとして保存してください。
基本的にこれからのBATの文字コードはANCI推奨です。
@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推奨です。
@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でコマンドが違うんだなという程度の理解で構いません。
Microsoftドキュメント
DISM ドライバー サービス (.inf) コマンドライン オプション
今回はインストール済のドライバーをエクスポート、インポートするBATです。
Windowsではコマンドプロンプト、PowerShellでいくつか方法があります。UniDeployでではコマンドプロンプトを基本としています。