インストール前にシステム上のサービスパックの存在を確認する

Windows用のサービスパックのインストールは、 Windows Updateサービスによって自動的に行われる場合と、 Windows Updateスタンドアロンインストーラー (WUSA)-msuファイルからの更新プログラムのスタンドアロンインストーラーによって手動で行われる場合があります。 WUSAに加えて、 展開イメージのサービスと管理 (DISM)、 展開イメージのサービスと管理システムを使用してOSを更新することもできます。 DISMを使用すると、msuファイルからだけでなく、cabファイルからも更新プログラムをインストールできます。 サービスパックのcabファイルを取得するには、必要なmsuファイルをMicrosoft Webサイトからダウンロードし、 / extractスイッチを実行して解凍する必要があります。 DISMを使用したcabファイル形式のサービスパックのインストールは、WUSAを使用したmsuファイルよりも高速であることに注意してください。 Windows更新プログラムを使用するためにDISMを選択したので、それについてさらに説明します。



多くのシステム管理者は、バッチファイルから特定の順序でインストールを開始することにより、サービスパックの「コレクション」を収集します。 しかし、時々、なじみのないコンピューターにサービスを提供し、どの更新プログラムがインストールされ、どの更新プログラムがインストールされていないかが正確にわからないことがあります。 長いリストからすべての更新プログラムのインストールを開始した場合、OSイメージにいくつかの更新プログラムがある場合、DISMシステムは引き続きそれらを「上に」インストールします。 スクリプトで時間を無駄にしないために、インストールされたサービスパックがOSに存在するかどうかをチェックする「関数」が使用されます。 たとえば、スクリプトコードでは、更新KB3177467 (サービススタック更新)およびKB3125574 (簡易ロールアップ更新)がインストールされます。 また、OSビット深度は自動的に決定されますが、これは質問のトピックとは関係ありません。



スクリプト:



@echo off set arch=x64 if "%PROCESSOR_ARCHITECTURE%" == "x86" if not defined PROCESSOR_ARCHITEW6432 set arch=x86 echo The most important updates after SP1 (Convenience rollup) %arch% echo ------------------------------------------------------------------------------- echo Get packages list. Please wait... dism /English /Online /Get-Packages > "%TEMP%\packages.txt" echo Servicing stack update: KB3177467 call :exist .\%arch%\Windows6.1-KB3177467-%arch%.cab ||^ dism /Online /Add-Package /PackagePath:.\%arch%\Windows6.1-KB3177467-%arch%.cab /Quiet /NoRestart echo Convenience rollup update: KB3125574 call :exist .\%arch%\Windows6.1-KB3125574-v4-%arch%.cab ||^ dism /Online /Add-Package /PackagePath:.\%arch%\Windows6.1-KB3125574-v4-%arch%.cab /Quiet /NoRestart echo ------------------------------------------------------------------------------- pause :exist dism /English /Online /Get-PackageInfo /PackagePath:%1 | find "Package Identity" |^ findstr /g:/ %TEMP%\packages.txt > nul && exit /b exit /b 1
      
      





ファイルとフォルダー:



スクリプトに示されているものはサンプルとして使用されるため、ここにはサービスパックファイルを添付しません。 スクリプトの場所に、必要なサービスパックを配置する必要があるx64およびx86フォルダーを作成する必要があります。 キリル文字を使用して情報メッセージを表示しない場合、スクリプトファイル自体をANSIエンコードで保存できます。 ロシア語のテキストを表示するには、cmd-fileをOEM 866エンコードで保存する必要があります。



職務内容:



インストールを開始する前に、DISMシステムはOSに( / Get-Packages ])にすでにインストールされている更新パッケージのリストを要求し、一時フォルダー%TEMP%\ packages.txtのテキストファイルに保存します 。 将来、各更新パッケージのインストールを開始する前に、「関数」の呼び出しが発生します引数として転送を使用して存在します-検証のためのインストール済みパッケージへのパス。 「関数」 「パッケージID」行が検索される、チェック済みのパッケージサービス情報から抽出( / Get-PackageInfo )が存在します。 この行は、保存されたファイル%TEMP%\ packages.txtで指定された行を検索する次の検索コマンドに「パイプライン化」されます 。 検索結果によると、2つのオプションが可能です。





考えられる問題:



OSに存在するアップデートの確認は、[ パッケージID]フィールドによってのみ実行され、ステータスは確認されません! 通常の状態では、パッケージのステータスはインストール済みですが、システムに存在するサービスパックの誤った状態である可能性があります:置き換えられていない (置き換えられていない )、存在しない存在しない )、 ステージングされた (中間)。 スクリプト中に作成されたファイル%TEMP%\ packages.txtを開くと、存在するパッケージのステータスを表示できます。 「誤った」状態がない場合は、問題はないはずです。インストールされていないものが確立され、すでにインストールされているものはスキップされます。



このスクリプトを使用して、不足しているパッケージでOSを更新すると、時間を大幅に節約できます!



All Articles