前回の記事で、Windows コマンドプロンプトで更新プログラムをインストールするを記載しましたので、コマンドプロンプトのコマンドを利用して、バッチファイルを作成します。
誰でもすぐに使用できるようにコピー&ペーストで簡単に作成できるようにしました。
前回の記事において、コマンドの詳細について記載していますので、以下の参照をお願いします。
バッチファイルにて実現したいこと
バッチファイルにて実現したいことは、以下の3点になります。
更新プログラムをインストールするバッチファイル
作成したバッチファイルは、以下の通りになります。
@echo off @chcp 65001 @set str1=開始: @set str2=終了: @set patch=C:\WindowsInstall\Patch\ @set log=C:\WindowsInstall\Log\ @set list=C:\WindowsInstall\PatchList.txt @echo %str1% %DATE% %TIME% > %log%\InstallUpdate.txt @cd C:\WindowsInstall\Patch\ @dir /b > %list% @for /f %%a in (%list%) do ( wusa.exe %patch%%%a /quiet /norestart /log:%log%\%COMPUTERNAME%_patch_log.evtx ) @echo %str2% %DATE% %TIME% >> %log%\InstallUpdate.txt
コマンドの説明
コマンドについて、上から順番に説明します。
@echo off
@echo offは、バッチファイルにコマンドが表示されないようにするためのコマンドです。
それぞれの頭に@を付与することにより、表示されないようになります。
逆に表示されるするには、@をつけないと表示されます。
デフォルトでは、@echo onになっていますので、表示されます。
@chcp 65001
バッチファイルはコマンドプロンプトで動作するので、Shift-JISになっていると文字化けの原因になりますので、UTF-8にして文字化けを起こさないようにしてます。
他の人達の環境にもよりますが、私の環境では、文字化けをしてしまったので、記載してます。
@set str1 / str2
setは、変数を定義するコマンドになります。
@set str1=開始:は、str1という変数名の箱の中に、開始:という文字を格納しています。
@set str2=終了:も、str2という変数名の箱の中に、終了:という文字を格納しています。
また、変数を呼び出す時は、%変数名%で呼び出すことができます。
例えば、開始:を呼び出したい場合は、%str1%になります。
@set patch / log / list
@set patch=C:\WindowsInstall\Patch\は、パッチを格納するフォルダパスを変数 patchに格納してます。
@set log=C:\WindowsInstall\Log\は、ログを格納するフォルダパスを変数 logに格納してます。
@set list=C:\WindowsInstall\PatchList.txtは、パッチのファイル名を書き出すファイルのフォルダパスを変数 listに格納してます。
@echo %str1% %DATE% %TIME% > %log%\WindowsUpdate.txt
%str1%には、開始:が格納してます。
%DATE%には、今日の日付が格納してます。
%TIME%には、時分秒が格納しています。
連結させると、開始:年月日時分秒のテキストが生成されます。
これを、>%log%\InstallUpdate.txtにて、開始:年月日時分秒のテキストをWindowsUpdate.txtに上書きで挿入してます。
これが、バッチ開始の時間になります。
@cd C:\WindowsInstall\Patch\
@cd C:\WindowsInstall\Patch\で、インストールをするためにパッチを格納するフォルダに移動します。cdは、Change Directoryで、移動するコマンドです。
@dir /b > %list%
@dir /b > %list%は、パッチを格納しているフォルダから、ファイル名を取得して、PatchList.txtに書き出しています。複数のセキュリティパッチを適用するために、このPatchListを読み込んで処理をするようにします。また、/bオプションは、余計な情報が非表示になり、ファイルまたはフォルダの名前のみを表示するために使用します。
@for文
@for /f %%a in (%list%)
では、for文は繰り返しの処理が行われます。/fオプションは、ファイルまたはコマンドの実行結果を行単位で変数に読み込み繰り返し処理を行えます。
%%aは、任意の変数名を指定して、繰り返し行えるようにします。
(%list%)は、PatchList.txtに記載したパッチファイル名を読み込んでますので、%%aには、PatchList.txtに記載したパッチファイル名の一行目が格納されてます。そして、一行目のパッチファイル名の処理が完了したら、二行目、三行目・・・という感じで、すべてのパッチファイルの行を読み込まれるまで処理が繰り返されます。
実行処理はdo(~)の中に記載します。
do (
wusa.exe %patch%%%a /quiet /norestart /log:%log%\%COMPUTERNAME%_patch_log.evtx
)
更新プログラムをインストールするためのコマンドにて、wusa.exe %patch%%%aとなっています。%patch%は、パッチファイルを格納している場所、%a%には、パッチを格納したファイル名を書き出したテキストファイルが格納していますので、パッチファイルのパスとファイル名が連結されて、インストールをしています。
例えば、10個パッチを格納したら、10個のパッチファイル名がPatchList.txtに書き出されて、パッチファイルが格納されているパスと一行目のパッチファイル名を読み込んで、インストールして、次にパッチファイルが格納されている二行目のパッチファイル名を読み込んで、インストールしたら、次に、3行目・・・のように、PatchList.txtのパッチファイル名をすべて読み込んで、インストールをするまで繰り返します。
wusa.exe以降のコマンドは、前回の記事で記載しておりますので、省略させていただきます。
@echo %str2% %DATE% %TIME% >> %log%\InstallUpdate.txt
%str2%には、終了:が格納してます。
%DATE%には、今日の日付が格納してます。
%TIME%には、時分秒が格納しています。
つなぎ合わせると、開始:年月日時分秒のテキストが生成されます。
これを、>%log%\WindowsUpdate.txtにて、終了:年月日時分秒のテキストをInstallUpdate.txtに追記で挿入してます。
これが、バッチ終了の時間になります。
次の記事で、設定方法とバッチ試験を記載していますので、是非、参照をお願いします。