Windowsイメージにサービスパックを追加するスクリプト

この記事は、 前回の記事の論理的な続きです。 Windowsイメージにサービスパックを追加(インストール/統合)するトピックを開発し、プロセスを自動化し、システム管理者を日常的なアクションから解放するDISMコマンドで動作するスクリプトを作成することにしました。 スクリプトの汎用性は、 「ライブ」システムにサービスパックをインストールしたり、 install.wimファイルをWindowsイメージに統合したりするために使用できるという事実にあります。 スクリプトの柔軟性は、コード全体の先頭でいくつかの変数の値を変更することにより、その作業をカスタマイズできることです。



たとえば、以前の記事のように、Windowsイメージにいわゆる便利なロールアップ更新 (KB3125574)と必要なサービススタック更新 (KB3177467)を追加します 。 スクリプトの作業中に、KB3177467のイメージに統合した後、それ(image- install.wim )がそれ以上の統合に適さないことが判明しました。 「ライブ」OSにKB3177467をインストールする場合、問題はありません。 この問題には2つの解決策があります。1)KB3177467を最新のものと統合する2)「問題」アップデートを以前のバージョンKB3020369に置き換える。 スクリプトで条件分岐を実装することにより、2番目のオプションを選択しました。



スクリプト



@echo off Title Convenience Rollup - most important updates after SP1 set _arch=x64 set _file=install.wim set _img=Online set _mnt=mount set _lev=2 :pre_menu cls dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file% echo ------------------------------------------------------------------------------- if %ERRORLEVEL% NEQ 0 if %ERRORLEVEL% EQU 2 (goto :bit) else (pause & exit) set /p _ind=Input index or press [Enter] for quit: || exit if %_ind% EQU 0 goto :bit if %_ind% GTR 0 if %_ind% LEQ 24 goto :ind_menu goto :pre_menu :ind_menu cls dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind% echo ------------------------------------------------------------------------------- if %ERRORLEVEL% NEQ 0 pause & goto :pre_menu choice /c abcdefghijklmnopqrstuvwxyz /n /m "Mount selected image? [m] " if %ERRORLEVEL% EQU 13 goto :mount goto :pre_menu :bit if %_img%==Online (if "%PROCESSOR_ARCHITECTURE%" == "x86" if not defined PROCESSOR_ARCHITEW6432 set _arch=x86)^ else (dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind% /English | find "Architecture : x86" > nul && set _arch=x86) goto :add :add cls echo Getting packages list. Please wait... dism /%_img% /Get-Packages /LogLevel:%_lev% /English > %TEMP%\packages.txt echo ------------------------------------------------------------------------------- if not %_img%==Online ( echo Add: Servicing stack update KB3020369 call :exist .\%_arch%\Windows6.1-KB3020369-%_arch%.cab ||^ dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.\%_arch%\Windows6.1-KB3020369-%_arch%.cab /NoRestart echo ------------------------------------------------------------------------------- ) else ( echo Add: Servicing stack update KB3177467 call :exist .\%_arch%\Windows6.1-KB3177467-%_arch%.cab ||^ dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.\%_arch%\Windows6.1-KB3177467-%_arch%.cab /NoRestart echo ------------------------------------------------------------------------------- ) echo Add: Convenience rollup update KB3125574 call :exist .\%_arch%\Windows6.1-KB3125574-v4-%_arch%.cab ||^ dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.\%_arch%\Windows6.1-KB3125574-v4-%_arch%.cab /NoRestart echo ------------------------------------------------------------------------------- del %TEMP%\packages.txt if not exist %_file% exit pause goto :unmount :exist dism /%_img% /Get-PackageInfo /LogLevel:%_lev% /PackagePath:%1 /English | find "Package Identity" | findstr /g:/ %TEMP%\packages.txt > nul exit /b :mount cls md %_mnt% dism /Mount-Wim /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind% /MountDir:%_mnt% if %ERRORLEVEL% NEQ 0 rd %_mnt% & pause & exit set _img=Image:%_mnt% goto :bit :unmount cls if not %_img%==Online ( dism /Unmount-Wim /LogLevel:%_lev% /MountDir:%_mnt% /Commit rd %_mnt% ) set _arch=x64 set _img=Online goto :pre_menu
      
      





ファイルとフォルダー



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


使用する



既に述べたように、スクリプトは更新をインストールまたは統合できます。 スタートアップフォルダー-install.wimにイメージファイルがない場合、スクリプトは更新プログラムを完全自動モードでインストールします。 スタートアップフォルダー-install.wimにイメージファイルがある場合、スクリプトはそこから既存の「インデックス」に関する情報を読み取り、番号の入力を求めます。 その後、選択した「インデックス」に関する拡張情報が表示され、マウント要求が発行されます。 任意のキーを押すと戻り、[m]キーを押すと、次の一連のアクションが起動します。イメージのマウント、更新の統合、イメージのアンマウント、「indec」選択メニューへの戻り。 その後、更新の統合用に別の「インデックス」を選択できます。 番号0の「インデックス」を選択すると、「ライブ」OSへのアップデートのインストールが開始されます。



コード解析



最初に、 setコマンドは変数を設定します。 install.wimイメージファイルの推定名を変更できます (たとえば、 install.esdに )。 マウントフォルダーの名前を変更したり、マウントフォルダーをスタートアップフォルダー外に配置する必要がある場合はパスを指定したりできます。 ロギングの「レベル」を変更して、 DISMシステムログファイルから情報メッセージを除外できます。



:pre_menu



アドバンスメニュー。 エラー制御を使用したwimファイルに関する基本情報の取得。 エラー2- wimファイルがない場合は、オンラインモードで起動します。 1つの画像に「インデックス」の最大数に関する情報が見つからなかったため、値を24に設定しました。



:ind_menu



インデックスメニュー。 エラー制御付きのwimファイルで選択された「インデックス」に関する拡張情報を取得します。 「インデックス」をマウントする提案。



:ビット



OSのビット深度を決定します。 オンライン保守の場合、システム環境変数が読み取られ、オフライン保守の場合、イメージから必要な情報が要求され、キー文字列がその中で検索されます。



:追加



パッケージの追加。 不要な作業を行わないために、最初にすでに追加された(インストールまたは統合された)パッケージのリストが要求され、次に検証のための各開始コマンドの前に疑似関数が呼び出されます。



:存在する



擬似機能の検証。 操作については、記事「 インストール前にシステム内のサービスパックの存在を確認する」を参照してください。 コードは少し調整されています。



:マウント



イメージをマウントします。 マウントフォルダは事前に作成されています。 エラー制御。 イメージの仕様を定義する変数が変更され、オフラインイメージへのパスを指すようになりました。



:マウント解除



イメージをアンマウントします。 オンライン保守(/オンライン)を実行した場合、マウントを解除する必要はありません。 変数を元の値に戻す。



適合性



このスクリプトの動作は、組み込みユーティリティdism.exeバージョン6.1.7600.16385を使用してWindows 7でテストされました。 Windows 8、8.1、10のバージョンでは、 DISM DIS.exeのdism.exeユーティリティのバージョンが高くなっています。 下位互換性は維持され、スクリプトも機能すると思います。 さらに、 esd-ファイルを使用することもできます。



All Articles