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つのオプションが可能です。
- インストールされたシステムによって更新が検出されない場合、「関数」 :が存在し、コード%ERRORLEVEL% 1で終了します。この場合、( / Add-Package )パッケージはDISMシステムによってインストールされます。 更新プログラムのインストール後(成功した場合)- %ERRORLEVEL%はリセットされ、次の「関数」の起動に使用できます。
- 更新がシステムにインストールされていることが検出されると、「関数」 :が存在し、コード%ERRORLEVEL% 0で終了します。この場合、更新パッケージのインストールは行われず、スクリプトはリストの次のアイテムの処理に進みます。 %ERRORLEVEL%をリセットする必要はありません。
考えられる問題:OSに存在するアップデートの確認は、[
パッケージID]フィールドによってのみ実行され、ステータスは確認されません! 通常の状態では、パッケージのステータスは
インストール済みですが、システムに存在するサービスパックの誤った状態である可能性があります:置き換えられてい
ない (置き換えられてい
ない )、存在し
ない (
存在しない )、
ステージングされた (中間)。 スクリプト中に作成されたファイル
%TEMP%\ packages.txtを開くと、存在するパッケージのステータスを表示できます。 「誤った」状態がない場合は、問題はないはずです。インストールされていないものが確立され、すでにインストールされているものはスキップされます。
このスクリプトを使用して、不足しているパッケージでOSを更新すると、時間を大幅に節約できます!