wds mdt 构建用于批量分发的 Windows 10 映像
ccwgpt 2024-11-30 19:22 35 浏览 0 评论
你好
这篇文章是对创建用于大规模分发的Windows映像(Windows 7)的后续或赞美。关于这一点,部署研究的人有一篇关于使用MDT创建更新的Windows 7主映像的精彩文章,非常有帮助。
今年夏天,Windows 10即将到来,我们已经开始慢慢地将某些领域过渡到微软的终极操作系统。在很大程度上,为Windows 10制作图像的过程与Windows 7相同,但有一些曲折。
工具。。。
我喜欢在虚拟机中构建映像。这种方法使我能够创建一个真正与硬件无关的映像。使用实际的硬件可以工作,但可能仍然存在 sysprep 无法概括的硬件残留物,并且可能将其投入生产。实际的硬件方法适用于 Ghost,但对于 MDT 则不再需要。选择任何虚拟化工具,它们都运行良好,有些甚至是免费的。以下是最好的一面:
- VMware Workstation/Player – 不是免费的,但功能丰富并集成到vSphere中。
- Microsoft Hyper-V – 随附 x64 服务器版本的 Windows(2008 及更高版本)和 x64 桌面版本的 Windows 8 及更高版本。尽管有所有"服务器"命名法,但客户端操作系统将正常工作。
- Oracle VirtualBox – 免费,可用于Windows,macOS和Linux作为主机操作系统和客户端操作系统。
我知道有适用于macOS和Linux的虚拟化产品,但我们正在使用Windows。我认为最好在整个过程中坚持这一点。我相信如果Windows不是主机操作系统,一切都会好起来的。
鉴于此,您将需要在中等强度的PC上完成这项工作。并非我们所有人都拥有Dell Precision工作站,甚至无法访问安装了Hyper-V或vSphere的服务器,但是使用动力不足的PC将使构建映像变得缓慢而悲惨,仅使用虚拟化就是一种缓慢而悲惨的体验。关键是存储。创建映像、使用快照的多个映像以及测试会占用磁盘驱动器上的大量空间。我不会费心使用小于1TB的驱动器。它将在较小的事情上工作,但在这种情况下,您将限制整个过程。即使是1TB SSD现在也价格合理。SSD是王道,但仍然不等于每千兆字节价格的旋转磁盘。将用于主机操作系统的256GB SSD与用于存储的4TB旋转HDD的应用程序相结合,可以很好地工作。RAM 也非常重要,因为在使用 VM 时,主机和来宾操作系统同时使用 RAM。尝试最大化你的电脑将采取什么。32GB,64GB的RAM对于这种类型的工作来说并不是不合理的。
现代 CPU 对于许多任务(虚拟化)来说都非常强大。英特尔 CPU 具有专门用于虚拟化的扩展。四核 CPU 应该是将执行虚拟化的主机 PC 的先决条件。您可以使用双核CPU,但回想一下上面关于PC和虚拟化不足的部分。如果你能得到一个具有更多内核的CPU,6,8,太好了!至强CPU真的很好。我不会在四核i7下打扰任何东西。另一件需要考虑的事情,有时被忽视,是公交车速度。您可以拥有具有许多内核的最快的CPU,大量的RAM,使用甜美的2TB SSD工作,但是如果将所有这些设备连接在一起的总线很小,那么您所创造的只是数字交通拥堵。NVMe和M.2 SSD正在慢慢取代基于SATA的SSD,并在消费类和企业PC中旋转硬盘。它们显著提高了数据存储的吞吐量和速度。DDR4内存是RAM技术中最新,最伟大的内存,直到2020年,届时DDR5有望实现。它不是最便宜的,但DDR4的性能优于其所有前身。显然,您希望尽可能地获得最佳设置,但我知道预算有限制。
虚拟机设置...
这可能因地而异,但我至少会使用4GB的RAM,一个具有2个内核的vCPU和一个128GB VHD。这对Windows 7和10来说效果很好。如果可以向 VM 提供 8GB 的 RAM,请执行此操作。我们拥有的最小的磁盘驱动器是我们在2014年购买的某些戴尔OptiPlex 9020中的128GB SSD。完成后,我的映像的磁盘占用空间约为 70GB(35GB 由 dism 压缩)。如果新映像很小,则 64GB VHD 可以。这和我去的时候一样小。可以将Windows 10(加上更新),Office 2016,Adobe Reader,Chrome,VLC和AV软件的图像压缩到32GB驱动器上,这是一个紧密的挤压。Windows的大小随着时间的推移而增长,32GB将在您意识到之前很久就消失了。我开始认为32GB对于iPhone来说太小了......虚拟网卡应配置为 NAT,而不是桥接到生产网络。我们将有一个全新的Windows安装,直接从ISO安装,并暂时未修补。映像在准备好进行测试(修补)或准备使用之前,不应看到生产 LAN。
操作系统安装...
为新映像创建来宾 VM 后,将其虚拟 CD/DVD-ROM 驱动器连接到 Windows 10 的 ISO 文件。在 VMware Workstation 中,默认情况下,未安装操作系统的新虚拟机会自动引导至虚拟 CD/DVD-ROM。
按照屏幕上的提示将 Windows 安装到 VM 中,但在从安装/文件复制到 OEM/Windows 安装程序的第一次重新启动后停止。安装程序将在此时停止,并等待用户输入。在那里,我们将使用审核模式以我们想要的方式完成 Windows 的设置。我在单独的帖子中提供了有关安装Windows 10的更多信息。
在此屏幕上停止!
要进入审核模式,请同时按control + shift + F3,就像三指敬礼(control + alt + delete)一样。Windows 将重新启动,并以内置管理员帐户身份自动登录,并且无论重新启动多少次,都将继续这样做,直到运行 sysprep。在这里,我们将根据需要自定义 Windows 10,然后使用无人参与.xml文件运行 sysprep,该文件将我们的配置文件复制到默认值 (CopyProfile)。
此时,从虚拟机软件中拍摄 VM 的快照。
大多数公司或"工作"PC都安装了Microsoft Office以及Windows和其他常见程序。Microsoft/Windows Update用于更新Office和Windows。此时,我安装了 Office(使用 MSP 文件以静默方式),并使 Windows 能够更新除自身之外的其他产品。这是通过新的"设置"应用程序\"更新和安全"\"高级选项"\"当我更新Windows时为我提供其他Microsoft产品的更新"来完成的。
必须启用上述设置,Windows 才能更新 Office。
设置完成后,在新 VM 上运行更新,直到没有更多更新。Windows 10版本越晚,需要的更新就越少。Microsoft Office 2016 已经存在了一段时间,并且在线提供了相当数量的可用更新。更新完成后,关闭 VM,然后拍摄另一个快照。
某些基本应用程序(不包括在定期安装的 Windows 中)是其他应用程序使用的实用程序。各种 Visual C++ Redistributables (VCPP)、Microsoft Silverlight 和 Update .NET Frameworks (4.5/4.6) 等应用程序。这些都可以在网上轻松找到,并且可以静默安装。部署研究站点有一个脚本,该脚本将所有C++可再发行组件收集在一起,并以静默方式将它们安装在一个脚本中。
从Microsoft 网站(x86 和 x64)下载 VCP,并将其移动到如下所示的文件夹结构:(#### = VCPP 应用程序的日期,2005-2015)
Source \ VC#### \ vcredist_x64.EXE
下载适用于 x86 和 x64 版本 2005、2008、2010、2012、2013 和 2015 的所有 VCPP 应用程序,并按上述方式排列它们。
可以在此处找到安装所有这些的脚本。
Silverlight也可以从微软的网站免费获得。
接下来,是安装人们每天使用的所有常规应用程序。像Google Chrome或Mozilla Firefox这样的Web浏览器,像Adobe Reader或SumatraPDF这样的PDF阅读器,像Skype或Zoom这样的通信应用程序,以及像VLC或iTunes这样的多媒体应用程序。我将打算使用的应用程序下载并存储在服务器共享上,然后使用静默安装脚本将它们安装在仍处于审核模式的 Windows 10 上。
一些适用于常见应用程序的基本静默安装命令。如果您要了解更多详细信息,请查看ITNinja.com。它们具有许多应用程序的无人参与和部署相关信息的简编。
- Adobe Reader: msiexec /qb /i AcroRead.msi TRANSFORMS=AdobeReaderDC.mst
- Google Chrome Enterprise: msiexec /qn /norestart /i "GoogleChromeStandaloneEnterprise.msi"
- 火狐浏览器: 火狐设置.exe -ms
- VLC: vlc-2.2.1-win32.exe /L=1033 /S /NCRC
- Java (如果你必须): jre-8u66-windows-x64.exe" /s JAVAUPDATE=0 AUTOUPDATECHECK=0
- 记事本++: npp.6.8.7.安装程序.exe /S
- 7-Zip: msiexec /q /I 7z920-x64.msi
Ninite.com有一个网站,它将创建一个包装器作为可执行文件,该包装器将下载所选的任何免费软件并安装它们。一气呵成。
请记住,放置在映像中的应用程序越少,该映像的相关性就越长。MDT/SCCM 除了操作系统本身之外,还可以部署应用程序。像 Adobe Flash Player 和 Adobe AIR 这样的产品经常更改,以至于我只是在部署映像时安装它们。
运行每个新安装的应用程序并根据需要对其进行配置。关闭,拍摄快照,然后重新启动并让 Windows 10 在审核模式下继续。
为了节省以我需要的方式配置 Windows 的时间和精力,我尝试尽可能多地实现自动化。编写基础知识脚本并消除冗余和重复的任务可以节省大量时间并防止不必要的错误。
创建用户帐户 - 我通常会创建一个本地用户帐户,用于管理用途和域不可用时的一般用途。
首先,我创建一个本地文件夹来包含日志文件和其他好东西,然后将其隐藏。此示例中的"C:\Stuff"。
mkdir C:\Stuff
attrib +h C:\Stuff
echo Creating local user accounts
net user pcadmin * /add /comment:”Local admin account” /passwordchg:NO
wmic useraccount where “name=’pcadmin'” set passwordexpires=FALSE
net localgroup “Administrators” pcadmin /add
net user pcuser * /add /comment:”Local user account” /passwordchg:NO
wmic useraccount where “name=’pcuser'” set passwordexpires=FALSE
net localgroup “Guests” pcuser /add
echo Local user accounts created on %date% at %time%>>C:\Stuff\Windows-10-Config-Script.txt
用户名后面的星号(*)将提示输入新用户的密码,而不是将其编码到脚本中并将其留给窥探。最后一个命令(echo...)将创建一个文本文件,并在 echo 和第一个>之间添加文本。如果是这种情况,双>>只会将文本添加到现有文件中。
为了防止用户通过Microsoft Windows Update使用新版本或Windows 10版本感到惊讶,我设置了一个注册表项来通过更新禁用Windows升级。
reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate” /v DisableOSUpgrade /t REG_DWORD /d 1 /f
echo Windows 10 version upgrade disabled on %date% %time%>>C:\Stuff\Windows-10-Config-Script.txt
我想要立即启动并运行的下一件事是远程桌面。
echo Enabling RDP with SASC alternate port
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp” /v “PortNumber” /t REG_DWORD /d “0xdesired_port_number_in_hex” /f
netsh advfirewall firewall add rule name=”Alternate RDP Port” dir=in action=allow protocol=TCP localport=desiredportnumberinbase10
echo RDP enabled with SASC alternate port on %date% at %time%>>C:\Stuff\Windows-10-Config-Script.txt
Windows默认配置的一个方面是隐藏文件扩展名。我可以猜测微软的设计师认为这样做可能对最终用户有帮助,但在实践中,我发现它对大多数人来说都不是。我注入了一个快速的注册表更改,以显示那些讨厌的扩展名 。
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v HideFileExt /t REG_DWORD /d 0 /f
echo Windows file extensions shown on %date% %time%>>C:\Stuff\Windows-10-Config-Script.txt
脚本的下一部分是完全可选的。我不建议在最终用户准备好之前激活Windows或Office。即使在审核模式下使用 Windows,配置默认用户配置文件时也要注意的是,在激活 Windows 之前,Windows 无法对其进行个性化设置。这意味着您将无法配置壁纸,屏幕保护程序,桌面图标或颜色主题。我不认为这有什么大不了的,因为大多数这些项目都可以通过部署后的注册表调整或使用组策略进行配置。但是,如果要在 sysprep 期间将这些项目包含在自定义默认用户配置文件中,请激活并进行必要的更改。然后,将其添加到脚本中。
REM 首先尝试 KMS 激活。如果这不起作用,请尝试 MAK 激活。
REM Try KMS activation first. If that doesn’t work, try MAK activation.
cscript C:\Windows\System32\slmgr.vbs /skms kmsserver.company.com:port
cscript C:\Windows\System32\slmgr.vbs /ipk THEWI-NDOWS-10KMS-PRODU-CTKEY
cscript C:\Windows\System32\slmgr.vbs /ato
if %ERRORLEVEL% == 0 echo Windows activated by KMS on %date% %time%>C:\Stuff\Windows-10-KMS-Act.txt
EXIT
else
REM If KMS is not available, use an MAK to activate.
cscript C:\Windows\System32\slmgr.vbs /ipk THEWI-NDOWS-10MAK-PRODU-CTKEY
cscript C:\Windows\System32\slmgr.vbs /ato
echo Windows activated by MAK on %date% %time%>C:\Stuff\Windows-10-MAK-Act.txt
EXIT
如果 Windows 刚刚激活,请关闭,拍摄快照,然后重新启动并让 Windows 10 在审核模式下继续。
自定义默认用户配置文件...
准备默认用户配置文件,即内置管理员帐户,以最终用户应拥有的方式。在此帐户下运行应用程序以回答任何首次运行提示时,我会谨慎行事。与Windows 7相比,Windows 10在用户首次登录过程中的功能更多。这些更改会延长新用户首次登录所需的时间。随着应用程序的运行和设置的配置,用户配置文件的大小会迅速增长,从 2MB 增加到 500MB,而无需执行太多操作。每次将新用户带到 Windows 时,都会从C:\Users\default复制此默认配置文件。配置文件越大,复制过程花费的时间就越长,并且已经很长的登录过程就越长。我越来越多地寻求通过组策略和我们的端点管理平台 BigFix 提供默认用户设置的方法。
如果有一段时间没有拍摄 VM 快照,请立即拍摄,当然也可以在以任何方式运行 sysprep 之前拍摄。
为了让 sysprep 将我们配置的自定义用户配置文件复制到默认值(替换 Windows 提供的内容),在运行 sysprep 时,Windows 上只能有一个配置文件。如果有多个配置文件,则 sysprep 不会复制任何内容。通过系统小程序从 Windows 中删除任何配置文件,自定义配置文件除外。这还可以确保登录到安装了此 Windows 映像的电脑的每个人都将获得自定义配置文件。
接下来,创建一个无人参与.xml文件,并将"复制配置文件"选项设置为 true。无人参与文件的创建需要在 Windows 10 的另一个单独安装上完成,该安装运行的 Windows 10 版本与正在进行无人参与.xml完全相同的版本。将无人参与.xml文件复制到即将进行系统准备并运行的 VM (C:\Windows\System32\sysprep):
sysprep.exe /oobe /generalize /shutdown /unattend:C:\File\Path\To\unattend.xml
Sysprep将花时间并做它的事情来推广Windows并关闭。此时拍摄另一个 VM 快照,然后再次打开 VM 电源。Windows OOBE 将像从 OEM 或供应商处获得的新电脑一样运行。创建一个伪造的用户帐户以完成 OOBE 过程并进入 Windows 桌面。注销新用户帐户并以内置管理员身份登录(应列在登录屏幕的左下角)。删除通过 OOBE 创建的新用户帐户,并确认给出的生成的用户配置文件是最终用户应具有的。再拍摄一张 VM 的快照。完成后,使用所选的成像工具捕获图像。我们使用 Microsoft Deployment Toolkit (MDT)。若要将 Windows 的安装捕获到 MDT 中,请从要捕获的 Windows 安装中通过"运行"对话框连接到部署共享。无需重新启动到 MDT Windows PE USB 驱动器。
\\mdtserver.company.com\deploymentshare\Scripts\LightTouch.vbs
选择为创建 Windows 10 映像而创建的 Sysprep 和捕获任务。该任务还将对 Windows 进行系统准备,然后重新启动到 Windows PE 并执行捕获,从而在部署共享的"捕获"文件夹中创建 WIM 文件。不要理会 VM,让事情慢慢来。根据 VHD 上的安装大小,可能需要一个小时或更长时间。特定于 Windows 10 的 1709 内部版本的行为是 Windows 在 MDT 捕获任务中进行系统准备后,不会重新启动到 Windows PE 的趋势。它会再次回到Windows,完全跳过捕获。为了解决此问题,我必须确保 VM 的虚拟 CD/DVD 驱动器(映射到 MDT Windows PE ISO 文件)是 VM 启动序列上的第一项。Hyper-V 将从启动顺序的顶部删除虚拟 CD/DVD 驱动器,并将其替换为 VHD 中的 Windows 启动卷。在 VMware Workstation 中,我必须编辑 VM 的 VMX 文件以包含启动延迟,这使我有时间中断启动顺序并根据需要重定向它。只需添加:
bios.bootdelay = 20000
到虚拟机的 VMX 文件,它将等待 20 秒,然后完成引导序列中的默认顺序,这足以停止它、进入虚拟 BIOS 并切换引导设备。提供一个正在注意...
相关推荐
- 定时任务工具,《此刻我要...》软件体验
-
之前果核给大家介绍过一款小众但实用的软件——小说规则下载器,可以把网页里的小说章节按照规则下载到本地,非常适合喜欢阅读小说的朋友。有意思的是,软件作者当时看到果核写的体验内容后,给反推荐到他的帖子里去...
- 前端定时任务的神库:Node-cron,让你的项目更高效!
-
在前端开发中,定时任务是一个常见的需求。无论是定时刷新数据、轮询接口,还是发送提醒,都需要一个可靠且灵活的定时任务解决方案。今天,我要向大家介绍一个强大的工具——Node-cron,它不仅能解决定时任...
- Shutter Pro!一款多功能定时执行任务工具
-
这是一款可以在电脑上定时执行多种任务的小工具,使用它可以根据时间,电量等来设定一些定时任务,像定时打开程序、打开文件,定时关机重启,以及定时弹窗提醒等都可以轻松做到。这是个即开即用的小工具,无需安装,...
- 深度解析 Redis 缓存击穿及解决方案
-
在当今互联网大厂的后端开发体系中,Redis缓存占据着极为关键的地位。其凭借高性能、丰富的数据类型以及原子性操作等显著优势,助力众多高并发系统从容应对海量用户的访问冲击,已然成为后端开发从业者不可或...
- 从零搭建体育比分网站完整步骤(比较好的体育比分软件)
-
搭建一个体育比分网站是一个涉及前端、后端、数据源、部署和维护的完整项目。以下是从零开始搭建的详细流程:一、明确项目需求1.功能需求:实时比分展示(如足球、篮球、网球等)支持多个联赛和赛事历史数据查询比...
- 告别复杂命令行:GoCron 图形界面让定时任务触手可及
-
如果你是运维人员或者经常接触一些定时任务的配置,那么你一定希望有一款图形界面来帮助你方便的轻松配置定时任务,而GoCron就是这样一款软件,让你的配置可视化。什么是GoCron从名字你就可以大概猜到,...
- Java任务管理框架核心技术解析与分布式高并发实战指南
-
在当今数字化时代,Java任务管理框架在众多应用场景中发挥着关键作用。随着业务规模的不断扩大,面对分布式高并发的复杂环境,掌握其核心技术并进行实战显得尤为重要。Java任务管理框架的核心技术涵盖多个方...
- 链表和结构体实现:MCU软件定时器(链表在单片机中的应用)
-
在一般的嵌入式产品设计中,介于成本、功耗等,所选型的MCU基本都是资源受限的,而里面的定时器的数量更是有限。在我们软件设计中往往有多种定时需求,例如脉冲输出、按键检测、LCD切屏延时等等,我们不可能...
- SpringBoot定时任务(springboot定时任务每小时执行一次)
-
前言在我们开发中,经常碰到在某个时间点去执行某些操作,而我们不能人为的干预执行,这个时候就需要我们使用定时任务去完成该任务,下面我们来介绍下载springBoot中定时任务实现的方式。定时任务实现方式...
- 定时任务新玩法!systemd timer 完整实战详解
-
原文链接:「链接」Hello,大家好啊!今天给大家带来一篇使用systemdtimer实现定时任务调度的详细实战文章。相比传统的crontab,systemdtimer更加现代化、结构清晰...
- Celery与Django:打造高效DevOps的定时任务与异步处理神器
-
本文详细介绍了Celery这一强大的异步任务队列系统,以及如何在Django框架中应用它来实现定时任务和异步处理,从而提高运维开发(DevOps)的效率和应用性能。下面我们先认识一下Cele...
- 订单超时自动取消的7种方案,我用这种!
-
前言在电商、外卖、票务等系统中,订单超时未支付自动取消是一个常见的需求。这个功能乍一看很简单,甚至很多初学者会觉得:"不就是加个定时器么?"但真到了实际工作中,细节的复杂程度往往会超...
- 裸机下多任务框架设计与实现(gd32裸机配置lwip 网络ping不通)
-
在嵌入式系统中,特别是在没有操作系统支持的裸机环境下,实现多任务执行是一个常见的挑战。本文将详细介绍一种基于定时器的多任务框架设计,通过全局时钟和状态机机制,实现任务的非阻塞调度,确保任务执行中不会出...
- 亿级高性能通知系统构建,小白也能拿来即用
-
作者介绍赵培龙,采货侠JAVA开发工程师分享概要一、服务划分二、系统设计1、首次消息发送2、重试消息发送三、稳定性的保障1、流量突增2、问题服务的资源隔离3、第三方服务的保护4、中间件的容错5、完善...
- 运维实战:深度拆解Systemd定时任务原理,90%的人不知道的玩法
-
运维实战:深度拆解Systemd定时任务原理,90%的人不知道的高效玩法一、Systemd定时任务的核心原理Systemd定时任务是Linux系统中替代传统cron的现代化解决方案,通过...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)