Windows WUSAコマンド 更新プログラムをアンインストールするバッチファイルの作成1

Windows

前回の記事で、Windows コマンドプロンプトで更新プログラムをアンストールする記事を記載しましたので、コマンドプロンプトのコマンドを利用して、バッチファイルを作成します。

誰でもすぐに使用できるようにコピー&ペーストで簡単に作成できるようにしました。

前回の記事において、コマンドの詳細について記載していますので、以下の参照をお願いします。

バッチファイルにて実現したいこと

バッチファイルにて実現したいことは、以下の3点になります。

  • バッチ処理が完了した時間を確認する。

  • バッチ実行後、アンストールが完了したことを確かめるようにする。

  • アンインストール対象のKB番号を除く番号をテキストファイルに入力して、バッチを実行するだけで、インストールできるようにする。 

更新プログラムをインストールするバッチファイル

作成したバッチファイルは、以下の通りになります。

確認時のOSは、Windows10 21H1になります。
@echo off
@chcp 65001
@set str1=開始:
@set str2=終了:
@set log=C:\WindowsUninstall\Log\
@set list=C:\WindowsUninstall\PatchList.txt
@echo %str1% %DATE% %TIME% > %log%\UninstallUpdate.txt
@for /f %%a in (%list%) do (
wusa.exe /uninstall /kb:%%a /norestart /log:%log%\%COMPUTERNAME%_patch_log.evtx
)
@echo %str2% %DATE% %TIME% >> %log%\UninstallUpdate.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 log / list

@set log=C:\WindowsUninstall\Log\は、ログを格納するフォルダパスを変数 logに格納してます。

@set list=C:\WindowsUninstall\PatchList.txtは、更新プログラム番号(KBを除く)が書き込まれたテキストファイルのフォルダパスを変数 listに格納してます。

@echo %str1% %DATE% %TIME% > %log%\UninstallUpdate.txt

%str1%には、開始:が格納してます。
%DATE%には、今日の日付が格納してます。
%TIME%には、時分秒が格納しています。
連結すると、開始:年月日時分秒のテキストが生成されます。
これを、> %log%\UninstallUpdate.txtにて、開始:年月日時分秒のテキストをUninstallUpdate.txtに上書きで挿入してます。
これが、バッチ開始の時間になります。

@for文

@for /f %%a in (%list%)
for文は繰り返しの処理が行われます。/fオプションは、ファイルまたはコマンドの実行結果を行単位で変数に読み込み繰り返し処理を行えます。
%%aは、任意の変数名を指定して、繰り返し行えるようにします。
(%list%)は、PatchList.txtに記載した更新プログラム番号(KBを除く)を読み込んでますので、%%aには、PatchList.txtに記載した更新プログラム番号(KBを除く)が一行目が格納されてます。
そして、一行目のパッケージIDのアンインストールが完了したら、二行目、三行目、・・・という感じで、すべてのパッチファイルの行を読み込まれるまで処理が繰り返されます。

実行処理はdo(~)の中に記載します。

do (
wusa.exe /uninstall /kb:%%a /norestart /log:%log%\%COMPUTERNAME%_patch_log.evtx
)

更新プログラムをアンストールするためのコマンドにて、/uninstall /kb:%%a となっています。%%aには、更新プログラム番号(KBを除く)を記載したPatchList.txtを参照して、一行目の更新プログラム番号(KBを除く)を読み込んでます。

例えば、10個の更新プログラム番号(KBを除く)をPatchList.txtに記載しておくと、一行目の更新プログラム番号(KBを除く)を読み込んで、アンインストールして、次に二行目の更新プログラム番号(KBを除く)を読み込んで、アンインストールしたら、次に、3行目・・・のように、テキストファイルの更新プログラム番号(KBを除く)をすべて読み込んで、アンインストールをするまで繰り返します。

wusa.exe以降のコマンドは、前回の記事で記載しておりますので、省略させていただきます。

@echo %str2% %DATE% %TIME% >> %log%\UninstallUpdate.txt

%str2%には、終了:が格納してます。
%DATE%には、今日の日付が格納してます。
%TIME%には、時分秒が格納しています。
つなぎ合わせると、開始:年月日時分秒のテキストが生成されます。
これを、>> %log%\UninstallUpdate.txtにて、終了:年月日時分秒のテキストをWindowsUnistall.txtに追記で挿入してます。
これが、バッチ終了の時間になります。

次の記事で、設定方法とバッチ試験を記載していますので、是非、参照をお願いします。

タイトルとURLをコピーしました