分享

Win10/Server2016镜像集成离线补丁

 pcnewage 2019-09-18
因为正常安装系统后再打补丁比较漫长,可以事先做好打过补丁的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.bat

::patchwim.bat sourceWim index packagePath mountPath outputPath [/nointeraction]::patchwim.bat g:\sources\install.wim 1 D:\package D:\mount D:\output@echo offpushd %~dp0set sourceWim="%~1"set index=%2set packagePath="%~3"set mountPath="%~4"set outputPath=%~5set nointeraction=%6set 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 :helpif not exist %packagePath% goto :err1if /i "%nointeraction%"=="/nointeraction" goto :startset /p tmpInput=Are you ready? (Y/N):if /i "%tmpInput%"=="y" goto :startgoto :eof:startif 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 :errorecho dism /mount-wim /wimfile:%outputWim% /index:1 /mountdir:%mountPath%
dism /mount-wim /wimfile:%outputWim% /index:1 /mountdir:%mountPath%if errorlevel 1  goto :errorecho dism /image:%mountPath% /add-package /packagepath:%packagePath%
dism /image:%mountPath% /add-package /packagepath:%packagePath%if errorlevel 1  goto :errorecho dism /image:%mountPath% /cleanup-image /startcomponentcleanup /resetbase
dism /image:%mountPath% /cleanup-image /startcomponentcleanup /resetbaseif errorlevel 1  goto :errorecho dism /unmount-wim /mountdir:%mountPath% /commit
dism /unmount-wim /mountdir:%mountPath% /commitif errorlevel 1  goto :errorecho imagex /export %outputWim% 1 %outputWimFinal% /compress maximum
imagex /export %outputWim% 1 %outputWimFinal% /compress maximumif errorlevel 1  goto :errordel /q %outputWim%echo Completed.goto :end:errorecho ERRORLEVEL: %ERRORLEVEL%goto :end:err1echo ERROR: The packagePath(%packagePath%) is not exist!goto :end:helpecho.echo Usage:echo     patchwim.bat sourceWim index packagePath mountPath outputPath [/nointeraction]echo     /nointeraction: No interactionecho Example:echo     (1) patchwim.bat g:\sources\install.wim 1 D:\package D:\mount D:\outputecho     (2) autopatch.bat:echo         patchwim.bat g:\sources\install.wim 1 D:\package D:\mount D:\output /nointeractionecho         patchwim.bat g:\sources\install.wim 2 D:\package D:\mount D:\output /nointeractionecho         patchwim.bat g:\sources\install.wim 3 D:\package D:\mount D:\output /nointeractionecho         patchwim.bat g:\sources\install.wim 4 D:\package D:\mount D:\output /nointeractionecho.:endif /i "%nointeraction%"=="/nointeraction" goto :eofecho Press any key to EXIT...pause>nul
popd

patchwimall.bat

::patchwimall.bat sourceWim packagePath mountPath outputPath [/nointeraction]::patchwimall.bat g:\sources\install.wim D:\package D:\mount D:\output@echo offpushd %~dp0set patchwim=patchwim.batset sourceWim="%~1"set packagePath="%~2"set mountPath="%~3"set outputPath=%~4set nointeraction=%5for /f "delims=: tokens=2" %%a in ('imagex /info %sourceWim%^|find /i "Image Count:"') do set imageCount=%%aset 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 :helpif not exist %packagePath% goto :err1if not exist %patchwim% goto :err2if /i "%nointeraction%"=="/nointeraction" goto :startset /p tmpInput=Are you ready? (Y/N):if /i "%tmpInput%"=="y" goto :startgoto :eof:startfor /l %%a in (1,1,%imageCount%) do (call %patchwim% %sourceWim% %%a %packagePath% %mountPath% "%outputPath%" /nointeraction
)if %imageCount% equ 1 goto :renamefor /l %%a in (1,1,%imageCount%) do (
    dism /Export-Image /SourceImageFile:"%outputPath%\install%%a.wim" /SourceIndex:1 /DestinationImageFile:%outWim%
)goto :complete:renamemove /y "%outputPath%\install1.wim" %outWim%goto :complete:completeecho All Completed! ImageInfo:
dism /get-imageinfo /imagefile:%outWim%goto :end:err1echo ERROR: The packagePath(%packagePath%) is not exist!goto :end:err2echo ERROR: %patchwim% is not found!goto :end:helpecho.echo Usage:echo     patchwimall.bat sourceWim packagePath mountPath outputPath [/nointeraction]echo     /nointeraction: No interactionecho Example:echo     patchwimall.bat g:\sources\install.wim D:\package D:\mount D:\outputecho.:endif /i "%nointeraction%"=="/nointeraction" goto :eofecho Press any key to EXIT...pause>nul
popd

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多