【WindowsXP】古いwsusscn2.cabを拾ってきて、WUスキャンを実行できるのか?! | 勝手に応援するブログ

勝手に応援するブログ

 
   人権侵害、性暴力、人身取引、等などがない社会になることをのぞんでいます。
 
   でも、ブログ筆者の立場は矛盾に満ちています。

前回の記事でリンクを貼ってたページに載ってる、
オフラインで wsusscn2.cab を使って Windows Update(Microsoft Update)を
スキャン実行する用の Windows スクリプトが、

 きしょく悪い?!?!(←www)BASICなヤツガーン、 ・・・ なもんですから、汗
 (個人的趣味的感想です。m(_ _)m

とりま、もちっとマトモ?!?!な「JScript スクリプト」で書き換えといて、・・。

△▼△▼▽▲▽▲△▼△▼▽▲▽▲△▼△▼▽▲▽▲△▼△▼▽▲▽▲

// Windows Update Scan, using 'Wsusscn2.CAB'.
// WSH Windows Script JScript.
// 2021.06.25  v1.00
//
var strVer="1.00";
var DEBUG=true;

var strCAB="wsusscn2.cab";   // WU スキャン用CAB。
var strJSE="wuscn2.jse";   // JScript スクリプト(このファイル)。

// 作成するHTMLのパーツ部品!? ^_^;)ゝあせる
var strHDR="WUscn2_HDR.HTM";
var strBDY="WUscn2_BDY.HTM";
var strFTR="WUscn2_FTR.HTM";
var strSCN="WUscn2_Rs.html";

// Windows スクリプト用のオブジェクト?!。
var oWsh=new ActiveXObject("WScript.Shell");
var oWfs=new ActiveXObject("Scripting.FileSystemObject");

// ファイルの存在確認をします。
function fnExist(strF, strP){
  if(! oWfs.FileExists(strP+"\\"+strF)){
    oWsh.Popup( "ファイルがありません!: " + strF + "\n" + strP + "\\" + strF + "\n" , 0, "エラーです!", 0+16 );
    oWsh=oWfs=null;
    WScript.Quit(3);
  }
  if(DEBUG){
    WScript.Echo("あります。:\n" + strP + "\\" + strF + "\n");
  }
  return 0;
}

// カレントディレクトリ取得&ファイル存在確認.
var strDir=oWsh.CurrentDirectory;
fnExist(strCAB, strDir);   // wsusscn2.cab は在りますか?
fnExist(strJSE, strDir);    // wuscn2.jse は在りますか?(←www汗
fnExist(strHDR, strDir);
fnExist(strFTR, strDir);
fnExist(strBDY, strDir);    // 部品は全部ソロってますか?

// 日付時刻(おまけ!?です)。
var dt=new Date();

// Microsoft.Update の ServiceManager.
var oMsUpdSsn=new ActiveXObject("Microsoft.Update.Session");
var oMsUpdMgr=new ActiveXObject("Microsoft.Update.ServiceManager");

// MS Update アップデート検索器.
var strPathCAB=strDir+"\\"+strCAB;
var oUpdSrv=oMsUpdMgr.AddScanPackageService("Offline Sync Service", strPathCAB);
var oUpdSchr=oMsUpdSsn.CreateUpdateSearcher();

WScript.Echo("準備しました: WinUpd アップデート検索器〔スクリプトバージョン"+strVer+"〕\nWsusscn2.CAB ファイル: "+strPathCAB+"\n\nアップデートを検索スキャンしています。。。\n");

oUpdSchr.ServerSelection=3;    // 3 なのだそうです。。。
oUpdSchr.ServiceID=oUpdSrv.ServiceID;   // ID写し。

// var oSrchRs=oUpdSchr.Search("IsInstalled=0");   // コメントアウト。
// 未適用と隠し?!をさがせ!
var oSrchRs=oUpdSchr.Search("IsInstalled=0 and IsHidden=0");

// こんなふう↓に、一つづつプロパティを変数に入れるんだ。。。
var oUpdates=oSrchRs.Updates;    // アップデート集合体。

if(oUpdates.Count == 0){
  WScript.Echo("該当するアップデートはありません。\n\n終了します。");
  oWsh=oWfs=oUpdSrv=oUpdSchr=null;   // これでオブジェクト free するらしい。
  WScript.Quit();
}

var strRs1="該当アップデートのリスト: "+ strPathCAB+" による。\n\n";
var strRs2="全部で "+(oUpdates.Count)+" 個のアップデートがあります。";
if( DEBUG ){WScript.Echo(strRs2+"\n");}

var oUpd=null;   // アップデートのオブジェクト?!
var strLstTt="";  // タイトル・リスト。
var strKB="";    // KB番号(コメントから正規表現で抽出するのだ!←簡単ニコニコ)。
var strLnk="";   // ハイパーリンクを作っとく(元々の WinUpd のように)。
var str="";

for(var i=0; i<oUpdates.Count; i++){
  oUpd=oUpdates.Item(i);    // アップデートオブジェクト一つづつ。
  strKB=(oUpd.Title).match(/KB[0-9]+/)[0];   // これでKB番号文字列を取得。
  // DEBUG モードでは、詳細をポップアップ。
  if(DEBUG){WScript.Echo(
    strKB + " : ("+oUpd.MaxDownloadSize+" バイト)\n"+
    "Title: "+oUpd.Title+"\n"+
    "〔重大さ〕: "+oUpd.MSRCSeverity+" , "+
    "〔最終更新日付〕: "+oUpd.LastDeploymentChangeTime+
    "\n\n"+
    "〔説明〕: "+oUpd.Description+"\n"
  );}
  strLstTt=strLstTt+(i+1)+">"+strKB+" :\n"+oUpd.Title+"\n\n";   // リスト。
  strLnk=strLnk+(i+1)+"〕<a href='https://www.catalog.update.microsoft.com/Search.aspx?q="+strKB+"' target='_blank' title='Microsoft Update カタログで開きます。'>"+strKB+"<\/a> <br>"+(oUpd.Title)+"<br><br>\r\n";
}
// ポップアップ表示。
oWsh.Popup(strRs1+strLstTt+strRs2, 0, "アップデート〔タイトル〕リスト", 0+64);
if( DEBUG ){oWsh.Popup(strLnk, 0, "DEBUG: リンクアンカーのリスト", 0+64);}

// ハイパーテキスト・ファイル作成。改行はMSDOS(\r\n) ※ちょとダサいかも?!
var oFileW=oFileR=null;  // 書きこ用と読みこ用。
var strBDYCPY=strBDY+"_CPY.HTM";
// Body部分のテンプレをコピとく。
oWfs.CopyFile("./"+strBDY, "./"+strBDYCPY, true);
// リストを出しとく。
oFileW=oWfs.OpenTextFile("./"+strBDYCPY, 8, true, -1); // 追加モード。
oFileW.WriteLine("WU オフラインスキャン.CAB ファイル: '" + strPathCAB + "'<br>\r\n");
oFileW.WriteLine(strRs2+"<br>\r\n");   // 全部でxx個のアップデ・・。
oFileW.WriteLine("実行日時: "+dt+"<br><br>\r\n");
oFileW.Write(strLnk);
oFileW.Close();
// 結果用HTMLを作成。HEAD用コピ。
oWfs.CopyFile("./"+strHDR, "./"+strSCN, true);
oFileR=oWfs.OpenTextFile("./"+strHDR, 1, true, -1);
oFileW=oWfs.OpenTextFile("./"+strSCN, 2, true, -1);
// 結果出力まるっぽ読み込み。→全部追加書き込み。
str=oFileR.ReadAll();
oFileR.Close();
oFileW.Write(str);
oFileW.Close();
oFileR=oWfs.OpenTextFile("./"+strBDYCPY, 1, true, -1);
oFileW=oWfs.OpenTextFile("./"+strSCN, 8, true, -1);
str=oFileR.ReadAll();
oFileR.Close();
oFileW.Write(str);
oFileR=oWfs.OpenTextFile("./"+strFTR, 1, true, -1);
str=oFileR.ReadAll();
oFileR.Close();
oFileW.Write(str);
oFileW.Close();

// ブラウザでHTMLを開きます。
oWsh.Run("cmd.exe /C start .\\"+strSCN+" \n", 1, false);

// おしまい。
oWsh=oWfs=oUpdSrv=oUpdSchr=null;
WScript.Quit();


△▼△▼▽▲▽▲△▼△▼▽▲▽▲△▼△▼▽▲▽▲△▼△▼▽▲▽▲

全部おんなじフォルダに置いて、JScript 実行します。

ウインドウズのコマンドプロンプトから、

 D:\Work> WScript .\wuscn2.jse

て、ヤッてもエエですけど、・・。

どうせ!やから、?! ・・ダブルクリック一発のヤツをこっさえときま。。。

[リンク先:] C:\WINDOWS\system32\cmd.exe /C WScript .\wuscn2.jse
[作業フォルダ:] D:\Work
[実行時の大きさ:] 最小化
[コメント:] WSH スクリプト JScript で、 wsusscn2.cab を使った Windows Update スキャンを行ないます。

・・・という内容の CMD ショートカットアイコンをつくって、

〔アイコンの変更〕から、"shell32.dll, 46" にすると、
Windows Update アイコンになるのだよ。にひひフッフッ・・・(←ww汗ase
スキャン実行JSEアイコン画像

 ・・・ あっ、と。。。
もちろん、wsusscn2.cab ファイルも忘れずに音譜←あたりまえ!!むかっ)。
デジ署名を確認しときましょう←これ大切!!目

wsusscn2.cabファイルのデジ署名を確認

XPの場合は、これ左矢印 かな!?

 かなり時間がかかりますけど、。。。 あせるあせる


とある(更新を怠ってる)Windows XP パソコンで実行してみたら、・・
WUスキャン結果その00

11個も出てきました。あせる汗汗

WUスキャン結果その01


WUスキャン結果その02


DEBUG モードにしてたら、
一つひとつのアップデートの詳細がポップアップされます。(・・以下、省略汗
(DEBUG モードじゃなけりゃ、一つひとつは開きませんよ。あせる


全部リストは別に出ます。目
WUスキャン結果ALL


スキャン結果はHTMLに書き出されて、最後に開きます。えっ
WUスキャン結果HTML画像



KB番号メモリンクになってます。MS Update カタログに飛べる右上矢印んで、

MSUpdateカタログへリンク


 即、「更新プログラム」をダウンロド右下矢印できます。ニコニコ音譜