Windows
windowsUpdateのサイレントインストールをしてみる。
はち
更新日:2021/08/11
情シスをやっていると新入社員が入社する毎にPCのセットアップをすることがよくあると思います。
そういう時、セットアップしなおしたPCにウインドウズアップデートを当てなおして何度も再起動をおこなわないといけません。
このために何時間おきにPCの前に立ちWindowsUpdateをおこないたくないので、WindowsUpdateのサイレント・インストールの仕組みを実装したいと思います。
サイレントインストールを実行し処理が終了する頃には全てのwindowsupdateがあたっているようにします。
※対象環境は、windows7SP1とします。
サイレントインストールの下準備
下準備1:windows7にSP1をあてる
※3年以内に購入されたPCにならほぼSP1が入ったWindows7だと思いますのでSP1が入ってないPCにはSP1をあててください。
SP1あてる用のディスクをisoファイルから作成しておくのが一番早いと思います。
参考サイト
https://www.microsoft.com/ja-jp/download/details.aspx?id=5842
下準備2:Microsoft Baseline Security Analyzer(MBSA)をインストールする
「MBSA」とはマイクロソフト提供のツールで未適用のセキュリティパッチをリストアップをおこなえる。
MBSAを同時にサイレントインストールもできるのですが、キレイにインストールされずに動かない場合があるので手動でインストールをオススメします。
参考サイト
https://www.microsoft.com/ja-jp/download/details.aspx?id=7558
下準備3:Wsusscn2.cab をダウンロード
最新のパッチ情報(カタログ・ファイル)のWsusscn2.cabをダウンロードします。
参考サイト
http://go.microsoft.com/fwlink/?LinkID=74689
下準備4:wget.exe をダウンロード
適応したいパッチを一括でダウロードするのに必要なのでダウンロードしておきます。
参考サイト
http://www.seotemplate.biz/free-seo/2203/
wsusscn2.cabのファイルを作業環境に設置
1 2 3 4 5 |
rem ----- wsusscn2.cab保存フォルダ作成 ----- mkdir "%USERPROFILE%\AppData\Local\Microsoft\MBSA\Cache" rem ----- wsusscn2.cabフォルダにコピー ----- copy /y wsusscn2.cab "%USERPROFILE%\AppData\Local\Microsoft\MBSA\Cache\wsusscn2.cab" |
☆1.Microsoft Baseline Security Analyzer(MBSA) の実行 対象ファイルをupdateFile.xmlに書き出す
1 2 |
rem ---- MBSA の実行 対象ファイルをupdateFile.xmlに書き出す ----- "%PROGRAMFILES%\Microsoft Baseline Security Analyzer 2\mbsacli.exe" /xmlout /unicode /nd /nvc /catalog %USERPROFILE%\AppData\Local\Microsoft\MBSA\Cache\wsusscn2.cab >updateFile.xml |
☆2.vbscriptでテキスト処理
対象端末にあてる必要があるパッチが「updateFile.xml」に書き出されます。
このファイルからパッチのURL部分だけ抜き出したいのでテキストを抜き出す処理のvbscriptを作製します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
var wsh = new ActiveXObject("WScript.Shell"); var strFileXML = "updateFile.xml"; var strFileTXT = "urllist.txt"; //正規表現パターン var regPattern00 = /(<UpdateData.*?>)([^<]*)(<\/UpdateData>)/ig; var regPattern01 = /IsInstalled\=\"false\"/i; var regPattern02 = /(<DownloadURL>)([^<]*)(<\/DownloadURL>)/ig; //XMLをテキストモード(UTF-16) で読み込みファイルとして開く objXML = new ActiveXObject( "ADODB.Stream" ); objXML .Type = adTypeText; objXML .charset = "utf-16"; objXML .Open(); objXML .LoadFromFile( strFileXML ); //結果要ファイル「urllist.txt」の設定 objTXT= new ActiveXObject( "ADODB.Stream" ); objTXT.Type = adTypeText; objTXT.charset = "utf-8"; objTXT.Open(); while ( !objXML .EOS ) { // ベースとなる「strFileXML」がなくなるまで読む // 一行毎に読み込み strText = objXML .readText( -2); //<UpdateData>~</UpdateData>が含まれる行が見つかった場合に以下を実行 if( strTextJA.match( regPattern00 ) ) { //IsInstalled=falseが含まれる行が見つかった場合に以下を実行 if( strTextJA.match( regPattern01 ) ) { //<DownloadURL>~</DownloadURL>が含まれる部分のテキスト取得 var bar = strTextJA.match(regPattern02); //<DownloadURL>~</DownloadURL>部分を除去 bar = String(bar).replace( regPattern02, "$2\n" ); if(bar != ""){ //テキストをつなぎあわせる resultList = resultList + bar; } } } } //テキストのゴミ取り resultList = String(resultList).replace( /undefined/ig,""); resultList = String(resultList).replace( /,/ig,""); // 処理完了後、ファイルを保存 objTXT.WriteText( resultList, 1); objTXT.SaveToFile( strFileTXT, 2); // 各ストリームを閉じる objTXT.Close(); objXML.Close(); WScript.Quit( 0 ); |
☆3.wget.exeを使い「urllist.txt」内のURLからファイルをダウンロードしパッチを適用していく
1 2 3 4 5 6 7 8 9 10 11 12 |
rem ----- 適応するパッチのダウンロード----- for /f %%I in (urllist.txt) do ( wget.exe %%I --no-check-certificate ) rem ----- .cab ファイルの一括適用----- forfiles /m *.cab /s /c "cmd /c dism /online /add-package=@path /norestart" rem ----- .exe ファイルの一括適用----- forfiles /m *.exe /c "cmd /c @file /q /norestart" shutdown -r -t 10 |
windows再起動と☆1~☆3の処理を「urllist.txt」の中身が空ファイルになるまで繰り返しす処理を作成する。
※スタートアップにでも仕込んで下さい。
以上をやることで実行すると、windowsUpdate最新版まで反映させることができます。