1、制作模板机 1.1把一台电脑安装好操作系统、官网原版驱动和需要标准化安装的软件。

注意事项:
(1)操作系统最好是到Windows官网或者msdn下载安装官方纯净版的,不要用戴尔联想等厂商出厂的系统,出厂的系统往往做过一些改动,封装之后容易出很多奇奇怪怪的问题;
(2)安装电脑必备常用的软件和工具;
(3)最好不要封装杀毒软件;
(4)如果要安装语言包,必须要使用lpksetup来安装语言包才行,否则封装会报错;
(5)不要打开微软商店,因为打开之后微软商店可能会对系统里的用户UWP应用自动更新,这些应用都是安装给当前用户的,安装后会导致封装报错。同理,也不要在微软商店安装UWP应用;
(6)不要加域,因为每台电脑主机名都不一样,要等装完系统手动更改后再加域;
(7)如果企业里有多种型号的电脑的话,为了减少驱动问题带来的影响,建议对每个型号的电脑都分开封装,避免以后带来不必要的麻烦。不过因为现在Win10可以自动下载兼容性的驱动,也可以尝试给其他型号的电脑安装;
(8)所有安装设置完成后重启电脑,封装系统前要确保此次开机电脑没有任何更改且系统没有任何异常。

1.2创建首次登陆计划任务

创建首次首次登陆计划任务主要是为了解决一些无法在系统封装前解决的问题,目前我遇到的问题主要有3点:

(1)笔记本带有NVIDIA的独显,系统弹出提示要到微软商店安装NVIDIA控制面板,但是前面说到不能到微软商店下载安装(戴尔的一些电脑需要安装WavesMaxxAudioPro才能使用耳机的麦克风功能,要实现封装也可以参考这个案例);
(2)Windows11系统封装后会出现无法打开Windows安全中心的问题,必须要使用powershell命令重置一下Windows安全中心这个应用;
(3)现在的笔记本安装Windows11后会自动开启bitlocker加密(部门版本Win10也会),但是用户们不懂管理秘钥,有的公司又是使用本地账户,这对于管理员来说简直就是噩梦,万一出了问题又搞不到秘钥,数据就都没了,详情可参考这篇文章《为了你的数据安全,请立即关闭新电脑的bitlocker!》。所以我这边一般不打开bitlocker加密,对于财务HR等电脑保存的信息比较敏感的人,可以再手动弄下bitlocker加密,并把秘钥保存到服务器上。

1.2.1获取NVIDIA控制面板的appx文件

(1)先在网页Microsoft应用商店这里找到NVIDIA控制面板,将链接地址复制下;


(2)到https://store.rg-adguard.net/这个网址粘贴链接,点击确定后会出现下载列表,点击最新版本的.appx格式文件即可下载,下载后在C盘新建一个名为“Tools”的文件夹,把下载的文件放在里面。

1.2.2编写powershell脚本

将以下代码复制到记事本,重命名为.ps1格式的powershell脚本文件,放在刚刚新建的“Tools”文件夹里,脚本名称最好用英文名,且不要有空格。

#重置Windows安全中心
Get-AppxPackageMicrosoft.SecHealthUI-AllUsers|Reset-AppxPackage
#安装NVIDIA控制面板
add-appxprovisionedpackage-online-packagepathC:ToolsNVIDIACorp.NVIDIAControlPanel_8.1.962.0_x64__56jybvy8sckqj.Appx-skiplicense
#关闭c,d,e,f,g驱动器的bitlocker加密
manage-bde-offc:
manage-bde-offd:
manage-bde-offe:
manage-bde-offf:
manage-bde-offg:
#禁用计划任务
Disable-ScheduledTask-TaskName"FixSomeProblemsOnFirstLogin"
pause
12345678910111213
1.2.3创建计划任务

(1)创建一个名为“FixSomeProblemsOnFirstLogin”的计划任务,可以选择其他名字,但是必须是英文且没有空格,且要与上面脚本中禁用的计划任务名字一致,勾选【使用最高权限运行】,配置选择【Windows10】;

(2)新建触发器,开始任务选择【登录时】;

(3)新建操作,操作选择【启动程序】,程序或脚本处填写powershell的路径:

C:WindowsSystem32WindowsPowerShellv1.0powershell.exe
1

添加参数处输入:

-executionpolicyunrestricted-file"C:ToolsFixSomeProblemsOnFirstLogin.ps1"
1

【-executionpolicyunrestricted】参数是为了不受限制的执行脚本,【-file】参数后面跟着的是脚本路径;

(4)取消勾选【只有在计算机使用交流电源时才启动此任务】,其他的选项可以自己按需配置;

(5)点击确定后完成计划任务的创建,想要的效果就是系统在安装之后第一次登录时自动运行这个计划任务,运行脚本来修复一些我们想要解决的问题,然后最后一行脚本自动禁用这个计划任务,实现只在首次登录时运行一次的效果。可以重启下电脑来看下效果是否符合自己的预期,封装前记得要启用这个计划任务。

1.3检查系统文件是否有损坏并尝试修复

打开CMD,运行以下命令

sfc/scannow
DISM/Online/Cleanup-Image/RestoreHealth
12
2、实现无人值守自动应答安装

电脑在第一次安装后会进入oobe开箱体验阶段,创建此文件可以实现无人值守自动安装,跳过oobe阶段,同时还可以设置一些电脑设置。

2.1安装WindowsADK

到https://docs.microsoft.com/zh-cn/windows-hardware/get-started/adk-install下载适用于匹配你当前系统版本的ADK工具,只需要安装里面的部署工具功能,要在其他电脑上安装,不要在要封装的电脑上安装。

2.2创建自动应答文件

(1)提前将Windows镜像中的ISO/sources/install.wim文件复制出来,在Windows系统映像管理器中选择此文件来创建自动应答文件;


(2)新建应答文件;


(3)目前我的需求是只需要跳过oobe阶段,设置个电脑型号就行了,以下以实现我的需求为例,展开【Components】,再展开【amd64_Microsoft-Windows-Shell-Setup_10.0.22000.65_neutral】找到【OEMInformation】,右键选择【添加设置以传送4specialize(4)】;


(4)参考下图进行设置,“Junson”改成自己的公司英文简称;


(5)参考下图设置电脑型号;


(6)找到【OOBE】,右键选择【添加设置以传送7oobeSystem(7)】;


(7)参考下图进行设置,用于跳过oobe阶段;


(8)更多设置可参考以下这篇文章:
HowtocreateanunattendedinstallationofWindows10
完成后将应答文件保存并命名为【unattend.xml】。

3、开始封装

将应答文件unattend.xml放到要封装的电脑的C:WindowsSystem32Sysprep目录中,封装系统前要确保此次开机电脑没有任何更改且系统没有任何异常。打开CMD,运行以下命令

C:WindowsSystem32SysprepSysprep/generalize/oobe/shutdown/unattend:C:WindowsSystem32Sysprepunattend.xml
1

如果到这步提示封装失败可以找C:WindowsSystem32SysprepPanther里的setupact.log和setuperr.log日志排错

注意,这里封装完成后电脑会自动关机,下次开机一定不要进系统,一定要直接进入PE系统来导出镜像,否则刚封装好的系统又进去的话会直接打开安装,就无法封装了。

4、导出镜像

进入PE系统,打开cmd,使用DISM命令把镜像导出成.wim格式

例如:把C分区的系统备份到D分区的根目录中,备份文件名为Thinkpad_T14_Win11.wim,可以封装好后在PE系统的CMD中运行以下命令

Dism/Capture-Image/ImageFile:D:Thinkpad_T14_Win11.wim/CaptureDir:C:/Name:Thinkpad_T14_Win11/Description:2022-06-24
1
命令解释:
/Capture-Image-指定捕获映像。
/ImageFile:-指定映像文件路径。
/CaptureDir:-指定捕获目录。
/Name:-指定名称。此项不能省略。
/Description:-指定描述。描述是为了说明这次备份的具体情况,我们这里用了日期。此项可省略。
123456

导出成功后,我们就得到.wim格式的系统安装映像了,保存好此文件,可以放到WDS服务器上进行WDS部署,也可以用PE里的Windows安装器来安装。

5、常见问题 问题一、封装失败,查看日志提示:

PackageMicrosoft.OneDriveSync_21220.1024.5.0_neutral__8wekyb3d8bbwewasinstalledforauser,butnotprovisionedforallusers.Thispackagewillnotfunctionproperlyinthesysprepimage.


原因:
系统里有某些UWP应用自动更新安装了,但是更新只是针对当前用户更新,所以需要卸载,如果要安装UWP应用,请参考上面安装NVIDIA控制面板的方法。

解决方法:
使用powershell进行卸载,以管理员方式打开powershell,输入以下命令,找到这个应用,星号为通配符:

Get-AppxPackage*Microsoft.OneDriveSync*
1

找到之后再在上条命令加上|Remove-AppxPackage,卸载这个UWP应用:

Get-AppxPackage*Microsoft.OneDriveSync*|Remove-AppxPackage
1
问题二、封装搜狗输入法或者WinRAR等某些软件报错

原因:网上搜索资料后,某些国内软件有外壳,或者是安装包有某些原因,导致无法封装或封装后无法使用。

解决方法:封装之后使用首次登录任务脚本,加上静默参数来静默安装。

问题三、某些设置在封装之后就没有了

原因:封装不是克隆,并不是封装前什么样子,安装之后就是什么样子。

封装和克隆的区别

最近,老看到一些一些诸如“封装后输入法设置丢了啊”、“封装后IE设置丢了啊”、“封装后自动更新又打开了啊”、“我明明封装前设置好了的,封装后防火墙又打开了啊”之类的帖子,甚至于因此引出了“ES重大bug”或者强烈要求ES更新解决bug之类的,究其原因,是因为没有搞清楚封装到底是什么,封装到底做了哪些操作,封装与克隆的区别。在此基于自己的理解,简单介绍一下封装与克隆,因水平有限,如有谬误,欢迎指正。

封装主要的目的是为了将Windows映像部署到不同的电脑,那么借用微软的话来说,就必须从映像中删除计算机特定的信息,这是封装最核心的事情。

当然封装还有其他事情,譬如在部署阶段提供各种接口,方便对新建用户、应用软件进行各种配置、方便用户添加驱动等。

主要说第一点吧,何谓计算机特定的信息呢?计算机名称,用户名,用户的SID,操作系统的授权许可,硬件驱动、微软某些软件的设定(譬如IE浏览器的各种设置、windowsmediaplayer的各种设定、输入法的设定)等等,这些在封装的过程中都会进行处理的,硬件驱动也相当重要,也会在封装过程中进行处理。对于NT5系统来说,微软会卸载清理掉,对于NT6系统来说,微软会解除驱动关联。当然,不同版本的Windows,微软的认定、处理方法不尽相同。

如果不处理硬件驱动,会有什么影响呢?最起码会有驱动残留啊(洁癖党受的了吗);驱动就有可能相互冲突,那么在新机器上就很有可能蓝屏、无法启动或者工作不正常;匹配了不合适的驱动有可能降低性能啊。

如果不处理软件相关的设定,那么用户名、计算机名称、用户的SID等等在新机器上也会是一样的,这样就世界大同了啊;这样也会有相当的风险的,譬如不处理账户SID,造成同一批机器都是相同的SID,那在局域网环境中可能就会出现严重的网络安全问题了。

其实封装本身是个很简单的事情:

(1)对于WinXP/2003等NT5系统而言,需要从系统源盘工具中提取deploy工具包,提取其中sysprep.exe及相关程序文件,创建C:Sysprep目录,并将sysprep.exe及相关文件复制到其中。执行C:Sysprepsysprep.exe,按照UI的提示说明进行操作,即可完成封装;

(2)对于Win7/8/2008/2012等NT6系统而言,封装更加简单,直接运行C:Windowssystem32sysprepsysprep.exe,按照UI的提示说明操作,即可完成封装。

所以“封装”并不复杂,真正麻烦和复杂的是我们所提出的各种各样的需求。例如我们需要增强系统部署范围,这样就要集成各种磁盘控制器驱动;我们需要更多接口,以调用自己所指定的程序(万能驱动、运行库、软件包、优化等);我们要压缩C盘软件节省体积,并于部署时释放;我们要让部署背景更好看,要在部署中显示更明确的进度等等。而正是我们的这些需求,令封装变的相当复杂,从而一定程度上降低封装成功率和稳定性。

说了以上这些,再说些题外的,假如你要封装,为了提高封装和部署的成功率,在封装时,你就应采取“硬件最小化”原则,即尽量减少非必要硬件,譬如去掉软驱、串口、并口、软盘控制器、USB设备等等,为达到这个效果建议尽量采用虚拟机封装,不要实体机封装。

那么如何实现自己的设定呢?导出相关设置的注册表项、或者自己做批处理在部署阶段(部署的各个阶段自己看一下区别)调用、自己编译可执行文件调用等等,这些要靠自己的长期积累和实践了。

而克隆基本上是对文件或者磁盘扇区完整的拷贝(ghost打包操作系统镜像时其实会忽略掉页面文件、休眠文件等),如果对没有封装的操作系统直接ghost打包,在异机上进行恢复操作,那么会缺少部署过程,之前是什么样,之后还是老样子。前文所说的封装的种种操作都不会进行,那么用户名、计算机名称、用户的SID、硬件驱动等等均是一样的,那么就有可能出现蓝屏、无法启动、授权失效、被识别为同一台机器等各种各样的问题。

有人会说,我用非封装的ghost克隆镜像包,在异机上恢复没有出现蓝屏等问题,甚至试过很多台机器都没有出现。我想说的是,如果你机器只是简单的一些办公,使用率不高,如果平台差异不大,的确几台、几十万台或许都不会出现大问题,但是稳定性呢?如果是局域网启用了文件共享那安全性呢?一些通过硬件识别的软件或许就会报错用不了或者直接识别为同一台,又或者启用了不匹配的驱动降低了硬件的性能等等不一而足,这些例子中我是遇到过一部分的。最后你再试一下平台差异性很大的机器,譬如一台老奔腾4代的机器,一台酷睿8代的机器试试看呢

有人说通过万能驱动或者SkyIAR的“换硬件不换系统”清理掉驱动,再用万能驱动安装驱动,那么封装没有什么必要。

SkyIAR的换硬件不换系统只是一种应急方案,其主要针对的是硬件驱动中磁盘控制器驱动和即插即用驱动,而且其使用条件中也写明“更换前后的硬件平台差异不算太大,硬盘读写机制无太大差别”,其清理也不可能做到100%精确,可能会有遗漏和误删除,这是由Windows系统复杂性的客观条件所决定的,SkyIAR能做的是尽一切可能的精确。一种应急方案,拿来当通用方案,这真没什么好说的。

而万能驱动的清理驱动功能说明如下,请仔细读一下

说明与注意:
(1)清理驱动是指切断已安装驱动与系统之间的关联,而不会删除掉已安装驱动的文件(微软自己的卸载亦是如此);
(2)本功能一般用于“当目标系统存在驱动冲突问题而无法解决时”进行补救,或进行驱动测试,非日常功能;
(3)本功能与原SkyIAR中的功能类似但更为完善,亦可达成“换硬件不换系统”等效果;
(4)离线清理工作不可能100%完善,清理可能导致目标系统异常,请谨慎使用。

缺陷已经足够多了,前文所说的封装的种种操作又无法实现,你还觉得封装没什么必要??

所以,如果是要用在异机上,那么最好是采用封装,ghost克隆一般比较适合于本机备份。不过如果你是开电脑店的,新进一批相同的机器,你又不会封装,那么直接克隆一台机器再用到其他机器上一般问题不大,如果用到其他平台不同的机器上,就只能祝你好运了。

最后,给一些微软的说明

sysprep(一般化)Windows安装

https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn938334

Sysprep过程概述

https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn938331