Win10/Server2016鏡像集成離線補丁

Win10鏡像集成離線補丁
由於正常安裝系統後再打補丁比較漫長,能夠事先作好打過補丁的iso,備未來使用。
以管理員身份運行cmd,而後經過dism提取、掛載、集成補丁、保存install.wim鏡像,最後用iso工具替換便可。

獨立補丁下載:
最新的Win10 1607和Windows Server 2016補丁信息:
https://support.microsoft.com/en-us/help/4000825/windows-10-windows-server-2016-update-history
最新的Win10 1703補丁信息:
https://support.microsoft.com/en-us/help/4018124
選擇一個最新的補丁(在最上方)後,點擊頁面內容裏的Microsoft Update Catalog連接
    How to get this update
    ----------------------
    To get the standalone package for this update, go to the _Microsoft Update Catalog_ website.
下載累計更新。

補丁查詢頁面:
http://www.catalog.update.microsoft.com/home.aspx

製做集成補丁的iso詳細步驟:
1. 查看鏡像源install.wim的索引號
先將iso文件載入虛擬光驅,這裏是G:盤,執行下面命令
C:\>dism /get-imageinfo /imagefile:G:\sources\install.wim

Deployment Image Servicing and Management tool
Version: 10.0.14393.0

Details for image : G:\sources\install.wim

Index : 1
Name : Windows 10 企業版 2016 長期服務版
Description : Windows 10 企業版 2016 長期服務版
Size : 12,555,951,804 bytes

The operation completed successfully.

2. 提取鏡像源install.wim加索引的鏡像到本地磁盤install_exp.wim
下面提取命令成功後,就能夠彈出虛擬光驅了。
C:\>dism /export-image /sourceimagefile:G:\sources\install.wim /sourceindex:1 /destinationimagefile:D:\install_exp.wim

Deployment Image Servicing and Management tool
Version: 10.0.14393.0

Exporting image
[==========================100.0%==========================]
The operation completed successfully.

3. 掛載install_exp.wim到一個文件夾
注意:被掛在的目標文件夾不能是ReFS文件系統
C:\>mkdir D:\mount
C:\>dism /mount-wim /wimfile:D:\install_exp.wim /index:1 /mountdir:D:\mount

Deployment Image Servicing and Management tool
Version: 10.0.14393.0

Mounting image
[==========================100.0%==========================]
The operation completed successfully.

4. 將要被集成的補丁文件,集中放到一個文件夾裏
這裏假設在D:\package

5. 應用補丁到掛載文件夾(時間較長)
C:\>dism /image:D:\mount /add-package /packagepath:D:\package

Deployment Image Servicing and Management tool
Version: 10.0.14393.0

Image Version: 10.0.14393.0

Processing 1 of 1 - Adding package D:\package\windows10.0-kb4039396-x64_bd1f9e1c7add02b8f3334f1aeaa07cae6632c3cf.msu
[==========================100.0%==========================]
The operation completed successfully.

6. 清理鏡像WinSxS,清理後會減小體積,但將不能卸載集成過的補丁(時間較長,可跳過)
C:\>dism /image:D:\mount /cleanup-image /startcomponentcleanup /resetbase

Deployment Image Servicing and Management tool
Version: 10.0.14393.0

Image Version: 10.0.14393.0

[==========================100.0%==========================]
The operation completed successfully.

7. 卸載鏡像保存修改(時間較長)
C:\>dism /unmount-wim /mountdir:D:\mount /commit

Deployment Image Servicing and Management tool
Version: 10.0.14393.0

Image File : D:\install_exp.wim
Image Index : 1
Saving image
[==========================100.0%==========================]
Unmounting image
[==========================100.0%==========================]
The operation completed successfully.

8. 製做ISO
1) 用imagex將這個wim最大化壓縮導出新的install.wim
注:若是沒有imagex,能夠直接把install_exp.wim重命名爲install.wim,可是文件會比較大。
C:\>imagex /export D:\install_exp.wim 1 D:\install.wim /compress maximum

ImageX Tool for Windows
Copyright (C) Microsoft Corp. All rights reserved.
Version: 6.3.9600.16384

Exporting: [D:\install_exp.wim, 1] ->
           [D:\install.wim]


[ 100% ] Exporting progress

Successfully exported image #1.


Total elapsed time: 59 sec

2) 將原ISO複製一份出來。假設新iso命名爲cn_windows_10_enterprise_2016_ltsb_x64_with_kb4039396.iso
3) 用UltraISO等工具將install.wim替換到新iso文件sources下同名文件,保存完成。
----------
說明:若是不用UltraISO,能夠使用微軟官方的Windows ADK工具(完整的的Windows 8.1版本有4.1GB)
其中的oscdimg命令能夠製做iso
命令幫助:https://technet.microsoft.com/zh-cn/library/cc749036(v=ws.10).aspx
ADK介紹:https://msdn.microsoft.com/zh-cn/library/hh825420.aspx
ADK下載頁面:http://go.microsoft.com/fwlink/?LinkId=293840
下面是離線下載Windows ADK的方法:
1. 首先到下載頁面下載到最新的Windows ADK安裝在線安裝程序adksetup.exe
2. 在cmd下離線下載
C:\>adksetup.exe /layout D:\adk
也能夠按功能安裝,詳細見 https://msdn.microsoft.com/zh-cn/library/hh825494.aspx

----------
製做install.wim合集
以Windows Server 2016爲例,MSDN版本包含了4個鏡像。
在分別製做好wim文件,注意用imagex按相同的壓縮方式(建議/compress maximum)導出4個wim,假設爲:
install1.wim
install2.wim
install3.wim
install4.wim
合併命令:
C:\>dism /Export-Image /SourceImageFile:D:\install1.wim /SourceIndex:1 /DestinationImageFile:D:\install.wim
C:\>dism /Export-Image /SourceImageFile:D:\install2.wim /SourceIndex:1 /DestinationImageFile:D:\install.wim
C:\>dism /Export-Image /SourceImageFile:D:\install3.wim /SourceIndex:1 /DestinationImageFile:D:\install.wim
C:\>dism /Export-Image /SourceImageFile:D:\install4.wim /SourceIndex:1 /DestinationImageFile:D:\install.wim
所有合併到install.wim,替換iso,完成。

 

patchwim.batweb

::patchwim.bat sourceWim index packagePath mountPath outputPath [/nointeraction]
::patchwim.bat g:\sources\install.wim 1 D:\package D:\mount D:\output
@echo off
pushd %~dp0
set sourceWim="%~1"
set index=%2
set packagePath="%~3"
set mountPath="%~4"
set outputPath=%~5
set nointeraction=%6
set outputWim="%outputPath%\install_%index%.wim"
set outputWimFinal="%outputPath%\install%index%.wim"
echo sourceWim: %sourceWim%
echo index: %index%
echo packagePath: %packagePath%
echo mountPath: %mountPath%
echo outputPath: "%outputPath%"
echo outputWim: %outputWim%
echo outputWimFinal: %outputWimFinal%
if "%outputPath%"=="" goto :help
if not exist %packagePath% goto :err1
if /i "%nointeraction%"=="/nointeraction" goto :start
set /p tmpInput=Are you ready? (Y/N):
if /i "%tmpInput%"=="y" goto :start
goto :eof
:start
if not exist %mountPath% md %mountPath%
if not exist "%outputPath%" md "%outputPath%"

echo dism /export-image /sourceimagefile:%sourceWim% /sourceindex:%index% /destinationimagefile:%outputWim%
dism /export-image /sourceimagefile:%sourceWim% /sourceindex:%index% /destinationimagefile:%outputWim%
if errorlevel 1  goto :error

echo dism /mount-wim /wimfile:%outputWim% /index:1 /mountdir:%mountPath%
dism /mount-wim /wimfile:%outputWim% /index:1 /mountdir:%mountPath%
if errorlevel 1  goto :error

echo dism /image:%mountPath% /add-package /packagepath:%packagePath%
dism /image:%mountPath% /add-package /packagepath:%packagePath%
if errorlevel 1  goto :error

echo dism /image:%mountPath% /cleanup-image /startcomponentcleanup /resetbase
dism /image:%mountPath% /cleanup-image /startcomponentcleanup /resetbase
if errorlevel 1  goto :error

echo dism /unmount-wim /mountdir:%mountPath% /commit
dism /unmount-wim /mountdir:%mountPath% /commit
if errorlevel 1  goto :error

echo imagex /export %outputWim% 1 %outputWimFinal% /compress maximum
imagex /export %outputWim% 1 %outputWimFinal% /compress maximum
if errorlevel 1  goto :error

del /q %outputWim%
echo Completed.
goto :end

:error
echo ERRORLEVEL: %ERRORLEVEL%
goto :end

:err1
echo ERROR: The packagePath(%packagePath%) is not exist!
goto :end

:help
echo.
echo Usage:
echo     patchwim.bat sourceWim index packagePath mountPath outputPath [/nointeraction]
echo     /nointeraction: No interaction
echo Example:
echo     (1) patchwim.bat g:\sources\install.wim 1 D:\package D:\mount D:\output
echo     (2) autopatch.bat:
echo         patchwim.bat g:\sources\install.wim 1 D:\package D:\mount D:\output /nointeraction
echo         patchwim.bat g:\sources\install.wim 2 D:\package D:\mount D:\output /nointeraction
echo         patchwim.bat g:\sources\install.wim 3 D:\package D:\mount D:\output /nointeraction
echo         patchwim.bat g:\sources\install.wim 4 D:\package D:\mount D:\output /nointeraction
echo.

:end
if /i "%nointeraction%"=="/nointeraction" goto :eof
echo Press any key to EXIT...
pause>nul
popd

 

patchwimall.batwindows

::patchwimall.bat sourceWim packagePath mountPath outputPath [/nointeraction]
::patchwimall.bat g:\sources\install.wim D:\package D:\mount D:\output
@echo off
pushd %~dp0
set patchwim=patchwim.bat
set sourceWim="%~1"
set packagePath="%~2"
set mountPath="%~3"
set outputPath=%~4
set nointeraction=%5
for /f "delims=: tokens=2" %%a in ('imagex /info %sourceWim%^|find /i "Image Count:"') do set imageCount=%%a
set outWim="%outputPath%\install.wim"
echo sourceWim: %sourceWim%
echo imageCount: %imageCount%
echo packagePath: %packagePath%
echo mountPath: %mountPath%
echo outputPath: "%outputPath%"
echo outWim: %outWim%
if "%outputPath%"=="" goto :help
if not exist %packagePath% goto :err1
if not exist %patchwim% goto :err2
if /i "%nointeraction%"=="/nointeraction" goto :start
set /p tmpInput=Are you ready? (Y/N):
if /i "%tmpInput%"=="y" goto :start
goto :eof
:start
for /l %%a in (1,1,%imageCount%) do (
    call %patchwim% %sourceWim% %%a %packagePath% %mountPath% "%outputPath%" /nointeraction
)
if %imageCount% equ 1 goto :rename
for /l %%a in (1,1,%imageCount%) do (
    dism /Export-Image /SourceImageFile:"%outputPath%\install%%a.wim" /SourceIndex:1 /DestinationImageFile:%outWim%
)
goto :complete
:rename
move /y "%outputPath%\install1.wim" %outWim%
goto :complete
:complete
echo All Completed! ImageInfo:
dism /get-imageinfo /imagefile:%outWim%
goto :end

:err1
echo ERROR: The packagePath(%packagePath%) is not exist!
goto :end

:err2
echo ERROR: %patchwim% is not found!
goto :end

:help
echo.
echo Usage:
echo     patchwimall.bat sourceWim packagePath mountPath outputPath [/nointeraction]
echo     /nointeraction: No interaction
echo Example:
echo     patchwimall.bat g:\sources\install.wim D:\package D:\mount D:\output
echo.

:end
if /i "%nointeraction%"=="/nointeraction" goto :eof
echo Press any key to EXIT...
pause>nul
popd
相關文章
相關標籤/搜索