今回はWindowsの更新プログラムによくある、.msuの拡張子ファイルをインストールするバッチを作ってみたいと思います。
それだけでは芸がないので、フォルダに一か所に集めた複数のmsuファイルを一括でインストールしてみるところまでやってみたいと思います。
基本的な情報とインストールコマンド
まず、msuファイルのダウンロードですが、Windows Update カタログからダウンロードできます。よくある、特定のKBが入っているとアプリケーション動かないなどの要因で自動更新をOFFにしている環境では、こちらから自分で更新プログラムを選んでダウンロードするケースは多いですね。
Microsoft®Update カタログ
https://www.catalog.update.microsoft.com/Home.aspx
ダウンロードしたmsuファイルについてはMicrosoftの下記ドキュメントの通り、ダブルクリックで手動インストールするか、コマンドラインから実行することでインストールできます。
Windows の Windows Update スタンドアロン インストーラーについて
https://support.microsoft.com/ja-jp/help/934307/description-of-the-windows-update-standalone-installer-in-windows
ですが、このままだとインストーラーが起動し、ある程度マウス操作が必要になってしまいます。
1台くらいであればそれほどでもありませんが、何台も設定する際などは億劫なものです。
なので、まずは操作の必要のないサイレントインストールにしてみたいと思います。
今回は実行するユーザーのデスクトップに配置したという前提でやってみます。
このように、オプションとして[-quiet]と[-norestart]を付けます。
[-quiet] は文字通り静かにインストールします。ダイヤログなどを一切表示せず、ユーザー側での操作なしにインストールが完了します。ただし、前提KBがある場合など前提条件がそろっていない場合は失敗します。
[-norestart] は 再起動を抑制します。
[-quiet]を指定していると再起動が必要なインストールの場合、勝手に再起動が始まってしまいます。いくつもの更新があった場合や、作業中で保存していないファイルがある場合などで有効です。作業が終わった時には手動で再起動する必要があります。
これによって一切表示せず、操作もなくインストールが可能です。
※msuファイルはデフォルトでWusa.exeに関連付けされているので、そのまま直実行させても動作しますので省略しました。
一括で複数のmsuファイルをインストールする
上記のコマンドと「For」と「Dir」コマンドを組み合わせて、バッチファイルと同じフォルダ内のすべてのmsuファイルを一気にインストールしてみましょう。
@echo off
cd /d %~dp0
for /f %%a in ('dir /b *.msu') do (
echo %%a インストール中
call %%a /quiet /norestart
)
pause
exit
ここでは詳しく解説しませんが、「dir /b *.msu」 で全てのmsuを拡張子にしているファイルを読み込んでいます。
その後、 「for /f %%a in ('dir /b *.msu') 」とすることで、forがDirの結果を一行ずつ読み込み、doの()内を実行するといった内容です。
この場合ですと、「dir」で読み込んだmsuファイルのリストを「for」が一個ずつインストールしていきます。
おまけ
以上で、msuファイルを一括でインストールするところまでになります。
この方法であれば、必要な更新プログラムを一つのフォルダにまとめてから、上記のバッチファイルを同じフォルダに放り込んで実行すれば、あとは待つだけで終わりになります。
小技として、Dirは英数字の若い順でリスト化します。
そのため、実行したい番号をmsuファイルにつけることで、インストール順序をコントロールできます。 前提KBがある場合等にリネームにて対応するとよいでしょう。
例)
Windows6.0-KB934307-x86.msu → 1.Windows6.0-KB934307-x86.msu
また、同じような更新ファイルで、Office用のKBにexeファイルで配布されるものがあります。
こちらも同様に*.msuの部分を*.exeに書き換えれば同様に動作させることができます。
例)
for /f %%a in ('dir /b *.msu') do (
echo %%a インストール中
call %%a /quiet /norestart
)
↓
for /f %%a in ('dir /b *.exe') do (
echo %%a インストール中
call %%a /quiet /norestart
)
自分はよくクリーンインストールをするのですが、この2パターンのKBインストールが面倒だと感じているのでこのバッチをよく使います。
なにかのお役に立てれば幸いです。
コメント
[…] 【Bat】複数のmsuをインストールするバッチの作り方今回はWindowsの更新プロ… […]