简介:一份面向服务器运维与 IT 管理者的 MDT 批量部署实操文档。内容围绕 MDT2013 协作活动目录、WDS、DHCP、ADK 完成 Windows 批量安装,先说明各组件在用户认证、IP 分配、网络启动和映像分发中的分工,再按步骤梳理部署服务器搭建、共享目录规划、WinPE 与 DISM 集成、操作系统映像及驱动注入等关键环节,同时覆盖客户端 PXE 引导、自动应答和安装后的域加入流程,并延伸到任务序列定制、驱动自动检测和与 SCCM 集成等扩展能力。资源为单份 docx 文档,共 1 个文件,压缩包约 1.7MB,以配置说明、环境清单和测试验证要点为主,适合需要从零搭建批量安装环境、统一系统版本的运维工程师。已有 452 人学习浏览。文档给出了可落地的操作顺序和常见排错切入点,如 DHCP 选项、WDS 启动映像配置等,可作为内部技术方案或实施参考。
1. MDT部署批量安装操作系统是什么:从一台台手动装到一批批自动装
公司里有一百多台电脑要重装系统,按传统方式用 U 盘或 Ghost 镜像一台台配,驱动、软件、计算机名、加域这些步骤够耗掉一整天。MDT 部署批量安装操作系统就是微软官方那套免费工具链 Microsoft Deployment Toolkit 的典型用法,配合 WDS 在 PXE 环境下做到:网卡启动后自动进入部署界面,选定任务序列,剩下的分区、打驱动、装软件、加域、命名全部自动完成。适合几十台到几千台的场景,追求的是统一镜像、可追踪的部署过程和可复现的排错路径。这篇笔记写给正在搭这套环境的运维工程师,把前置条件、关键参数和最容易翻车的点位一次说透,新手能照做,熟手能避开血泪坑。
2. 先把地基打好:AD、DHCP、WDS 与共享目录的准备
2.1 MDT 的完整工作链路:从 PXE 引导到系统配置完成
MDT 本身不提供 PXE 服务,它依赖 WDS 把 WinPE 启动镜像分发给客户端。整条链路是:客户端开机,网卡向 DHCP 要 IP,DHCP 把 TFTP 服务器地址和启动文件名一并告诉它;客户端从 WDS 下载 WinPE;WinPE 加载后根据 Bootstrap.ini 里的 DeployRoot 去连存放部署共享的 SMB 服务器;接着读取 CustomSettings.ini 和任务序列,在 WinPE 里把 install.wim 应用进去、注入驱动、执行配置步骤;重启进入全新系统后继续完成加域、装软件等动作。
每个环节都有自己的责任方。DHCP 负责给 IP 和引导指向,WDS 负责出 WinPE,MDT 负责编排后续所有动作。新手最容易犯的错是把它们当成一个东西去排查,结果在 WDS 上找 MDT 的日志,或者反过来。日志位置完全不同:DHCP 看事件查看器,WDS 看管理控制台里的会话状态,MDT 的部署日志在客户端 C:\MININT 和 C:\Windows\Temp\DeploymentLogs 下。这个先记牢,后面排查速度能差出好几倍。
用一张表把这四类组件的角色和责任说清楚:
| 组件 | 在链路中的职责 | 部署前必查项 |
|---|---|---|
| AD | 提供域名环境、账号认证和 DNS 解析 | DNS 记录正常,服务账户有加入域权限 |
| DHCP | 给客户端分配 IP,下发 TFTP 地址(066)和启动文件名(067) | 作用域激活,066/067 指向正确且无冲突 |
| WDS | 响应 PXE 请求并分发 WinPE 启动镜像 | 服务器已初始化,响应所有客户端 |
| SMB 共享 | 存放部署共享,WinPE 阶段挂载并读取任务序列和镜像 | 共享可访问、凭据正确、防火墙放行 445 |
排错时先确认这张表里每一项是否就绪,大多数问题都出在这四类组件之间的连接上,而不是出在 MDT 本身的规则上。组件之间的联调比组件内部配置更容易被忽视,经验是先用命令行工具验证连通性,再打开 MDT 界面看配置。
2.2 在 Windows Server 上装好三件套并给出正确参数
常见做法是在一台 Windows Server 上同时装 AD、DHCP 和 WDS,MDT 控制台装在另一台管理机或直接装在域控上。域控同时承担高负载的 WDS 分发确实不是最优解,但预算有限的小环境一台机器全扛也能跑。先把角色装上:
# 在准备作为基础设施服务器的 Windows Server 上运行,需以管理员身份执行 Install-WindowsFeature AD-Domain-Services, DHCP, WDS -IncludeManagementTools # 如果这台机器还没升级成域控,直接把域建起来 Install-ADDSForest -DomainName "corp.example.com" -DomainNetbiosName "CORP" ` -ForestMode "WinThreshold" -DomainMode "WinThreshold" ` -InstallDns:$true -SafeModeAdministratorPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force) # 初始化 WDS 并使用 Active Directory 集成模式响应客户端 Install-Wds -InstallMode:true -NewRemInstall:$false第一条命令装好 AD 域服务、DHCP、WDS 角色和远程管理工具,装完需要重启。第二条命令会把机器变成新林域控,并顺手装上 DNS;ForestMode 和 DomainMode 的“WinThreshold”对应 Windows Server 2016 以上的域功能级别,实际按你的 Server 版本选择即可。第三条 Install-Wds 是批处理方式初始化 WDS,-NewRemInstall:$false 表示采用 AD 集成模式,不再用独立的远程安装文件夹。
装完之后打开 Windows 部署服务控制台:右键服务器 → 配置服务器 → 选择“与 Active Directory 集成”,然后在“响应策略”里选“响应所有客户端计算机(已知和未知)”。这一步漏掉的话,PXE 请求会被 WDS 直接忽略。响应所有客户端在测试期能省很多事,生产环境如果担心随意部署,可以先选“仅响应预安排的客户端”并在 AD 里预设机器条目,验证通过再放开。
DHCP 侧的配置更直白,但细节决定成败。先创建作用域,再设置 066/067 选项:
# 创建 DHCP 作用域,给客户端分配合法 IP Add-DhcpServerv4Scope -Name "Corp-Clients" -StartRange 10.10.0.100 -EndRange 10.10.0.200 ` -SubnetMask 255.255.255.0 -State Active # 给作用域设置 DNS、网关和引导选项 Set-DhcpServerv4OptionValue -ScopeId 10.10.0.0 -DnsServer 10.10.0.5 -DnsDomain corp.example.com -Router 10.10.0.1 Set-DhcpServerv4OptionValue -ScopeId 10.10.0.0 -OptionId 66 -Value "10.10.0.5" Set-DhcpServerv4OptionValue -ScopeId 10.10.0.0 -OptionId 67 -Value "\boot\x86\wdsnbp.com"66 号选项是 TFTP 服务器地址,指向 WDS 服务器;67 号是启动文件名。注意 67 号的值以反斜杠开头,不要把 IP 或 http 前缀带进去。x86 路径指向 32 位引导器,它会根据客户端 UEFI/Legacy 架构自动切换合适位数,所以大多数混架构环境用这个路径更省事。如果你的机器全是 UEFI 且开了 Secure Boot,还要在 WDS 里额外配置 UEFI 启动映像,引导文件对应 boot\x64\wdsnbp.com,否则会出现能引导但进不了 WinPE 的怪象。
2.3 准备 SMB 共享和服务账户
MDT 的所有内容都放在一个 SMB 共享里。共享目录不要求在 WDS 那台服务器上,但建议和管理机在同一二层网络内,带宽至少千兆。创建共享时给到“Everyone 读取”只是临时做法,正式环境单独建一个服务账户(比如 MDT_SVC),共享权限给完全控制,NTFS 权限给读取和执行。因为在 WinPE 阶段客户端没有域身份,Bootstrap.ini 里要写入这个账户的凭据来连接共享。
# 创建目录并共享,最简单的方式 New-SmbShare -Name "DeploymentShare$" -Path "D:\DeploymentShare" -FullAccess "Everyone"共享名带 $ 表示隐藏共享,客户端访问路径是 \10.10.0.5\DeploymentShare$。这里先预告一个坑:共享所在服务器如果额外做了防火墙策略,放行 445 端口入站是必须的。Windows Server 默认放行文件和打印共享,但云主机或某些安全策略加固过的环境里,很容易出现 WinPE 能引导但连不上部署共享的局面,后面避坑章节会展开。
服务账户在 AD 里创建时不需要任何特权组,只要能在启动时通过网络认证并读取共享即可。如果开了“复制部署日志到服务器”这类功能,再补写入权限。这个账户单独用于 MDT,不要跟域管共用;一旦 Bootstrap.ini 泄露,它不会把整个域的管理权限暴露给网络包嗅探者。
3. 搭部署共享与导入镜像:MDT 控制台里最花时间的活儿
3.1 安装 MDT 控制台并创建部署共享
MDT 是一套独立安装包,安装文件从微软官网下载,解压后运行安装程序会装上“Microsoft Deployment Toolkit”控制台和一组 PowerShell 模块。系统要求不高,一台 Windows 10/11 或 Server 都行,强烈建议以域内管理员身份操作,因为后面要导入 AD 相关配置和访问服务器共享。装完后在开始菜单里打开“Deployment Workbench”,这就是 MDT 的控制台。
创建部署共享的入口在控制台左侧:Deployment Share → New Deployment Share。向导会依次要共享路径、共享名称、描述。路径建议放在数据盘独立目录,不要放进系统盘 C 盘,因为镜像文件动辄几十 GB,频繁读写会影响系统性能。共享名可以叫 MDTBuildLab 或 DeploymentShare$,注意不能带空格和中文,WinPE 里解析 UNC 路径时遇到空格容易出莫名问题。
创建完之后控制台会自动生成这些子目录:
D:\DeploymentShare\ ├── Control # 任务序列控制文件、脚步 ├── Operating Systems # 操作系统镜像(向导会复制 ISO/WIM 到此处) ├── Out-of-Box Drivers # 驱动包 ├── Packages # 补丁与更新包 ├── Applications # 应用软件源文件 ├── Scripts # 自定义脚本和 MDT 自带脚本 ├── Tools # 平台工具 └── Boot # WinPE 启动镜像目录这些目录不要让 MDT 以外的手工操作频繁改动。我见过有人直接在 Operating Systems 文件夹里拖 ISO 进去,结果控制台识别失败,最后只能删掉重建。正确姿势是只从控制台执行导入、更新等操作,目录结构交给 MDT 自己管。
3.2 导入操作系统镜像:选 install.wim 还是完整 ISO
导入操作系统的入口是 Operating Systems → Import Operating System,三种来源:完整 ISO 文件、WIM 文件、从参考机捕获的镜像。最常见做法是给完整 ISO 路径,MDT 会提取其中的 install.wim。导入向导会列出这个 WIM 里的所有版本索引,例如 Windows 11 专业版、企业版、教育版,只勾选你真正要部署的版本。
Windows 10/11 官方镜像常是多版本合一的大 WIM,导入后会在 Operating Systems 节点下出现多条记录。想精简镜像体积、避免误选版本,可以先用 DISM 处理 WIM:
# 查看 install.wim 里的版本索引和元数据 dism /Get-WimInfo /WimFile:D:\sources\install.wim # 把索引 3(以家庭版为例)导出成独立的新 WIM dism /Export-Image /SourceImageFile:D:\sources\install.wim /SourceIndex:3 ` /DestinationImageFile:E:\wim\install-clean.wimExport-Image 不修改原文件,而是生成新 WIM。之后把新 WIM 导入 MDT 即可。这样做的好处:任务序列里不会误选错版本,共享目录体积能小好几个 GB。但删版本前要确认各 SKU 的许可证需求,我踩过一次——把企业版索引误删了,现场发现一台机器必须装企业版,只能重新导入完整镜像,白白等两小时复制。
3.3 驱动和软件包的文件夹组织:按型号、按驱动、按软件
驱动是批量部署里的隐形工作量。MDT 的驱动导入入口是 Out-of-Box Drivers → Import Drivers,把厂商驱动包按文件夹导入。文件夹组织方式直接影响部署时选驱动的效率,我一般按“厂商/型号/系统版本”三层来建:
D:\DriverStore\Dell\Latitude 5420\Win11 x64 D:\DriverStore\Dell\OptiPlex 3080\Win11 x64 D:\DriverStore\HP\EliteBook 840 G7\Win10 x64导入时勾选“Import drivers into a new folder in the Out-of-Box Drivers node”,并按上述结构建目录。部署时通过 CustomSettings.ini 里的 DriverSelectionProfile 和型号匹配规则,让 MDT 只给对应机器注入对应驱动。这种隔离方式比把几百个驱动全部平铺在一个目录里好很多:任务序列执行时过滤快,镜像不会因全量注入而膨胀,后期更新驱动时不会互相污染。
软件也同理,在 Applications 节点下按部门或场景建子文件夹,比如“基础运行库”“办公软件”“安全软件”。任务序列里加“安装应用程序”步骤指定某个文件夹,MDT 会按序处理。如果你的环境有统一软件分发平台,原则上可以把輕量客户端工具放这里,重型软件留给后期运维平台推送,别把 MDT 当成包管理仓库。
3.4 调整部署共享的权限和无人值守设置
部署共享创建完成后,还要确认共享权限和控制台里的 Rules 页签。打开 Deployment Share → 右键 → Properties → Rules,默认只有几行初始配置。MDT 在每个关键阶段都会读这个文件:WinPE 启动阶段优先读 Bootstrap.ini,进入安装阶段后读 CustomSettings.ini。两者分工不同,Bootstrap.ini 决定能不能连上共享,CustomSettings.ini 决定怎么装、装什么版本、是否自动加域。这两个文件的编辑入口不同:CustomSettings.ini 能在控制台 Rules 页签里直接编辑,Bootstrap.ini 在 Boot 目录下,改完后要重新生成启动镜像。
权限方面的核心是:WinPE 里访问共享用的账户写在 Bootstrap.ini 里,给普通域账户就够了,不要给这个账户过高的权限。最小权限集是共享权限“读取”,因为部署过程中客户端只需要读共享,日志会写到客户端本地;如果开了日志回传,才需要“写入”。安全上不建议把 Domain Admin 写进 Bootstrap.ini,WinPE 引导文件拿到的攻击者能解包看到口令,把这个账户限制到只能读指定目录,损失可控。
有一点要提醒:在控制台里改完 Rules 或 Bootstrap.ini 后,必须右键 Deployment Share → Update Deployment Share 来重新生成 WinPE 启动镜像,并在 WDS 里更新启动映像,否则改的参数根本没生效。这个“忘了重新更新部署共享”的问题,排在我踩坑清单的前三名。
4. 任务序列与规则文件:MDT 真正聪明的地方
4.1 建立任务序列:选对模板再一步步拆
任务序列是整条部署流水线的编排文件。在 Task Sequences 节点右键 → New Task Sequence,名字要起得能一眼看懂,例如“Windows 11 Pro x64 – Standard Client”。模板选“Client Task Sequence”,这是标准客户端模板,包含从初始化到收尾的七个任务组。每个组里是具体的步骤:应用操作系统、应用网络设置、应用本地数据、恢复用户数据等。
模板默认已经合理,我一般会改动三处:第一,把“请求密码”步骤设为跳过,并在规则文件里写好密码占位;第二,在“应用操作系统”之后加一个“运行 PowerShell 脚本”步骤,用于执行后续软件安装脚本;第三,把“状态捕获”相关的步骤禁用,因为多数场景是全新安装,用不到 USMT 状态迁移。
用一张表看各任务组的定位:
| 任务组 | 默认动作 | 我的常用改动 |
|---|---|---|
| Initialization | 采集信息、请求密码 | 设跳过密码与欢迎页 |
| State Capture | 备份用户数据(USMT) | 全新安装时整组禁用 |
| Preinstall | 分区、格式化、应用网络设置 | 保留默认 |
| Install | 应用操作系统、驱动、软件 | 核心步骤,追加自定义脚本 |
| PostInstall | 应用更新、恢复状态 | 按环境加补丁或组策略刷新 |
| State Restore | 恢复用户数据 | 全新安装时禁用 |
每一步右侧的 Options 选项卡里可以做条件过滤,常见条件是任务序列变量等于某个值。这里的逻辑是:你可以在任务序列里定义变量,比如 IsLaptop,然后在 Options 里判断“IsLaptop 是否等于 True”,只有满足才执行该步骤。这就让同一套任务序列能针对笔记本和台式机走出不同分支,笔记本跳过 BitLocker 预配、台式机跳过触控板驱动等。
4.2 CustomSettings.ini 的核心参数和优先级
CustomSettings.ini 是 MDT 里需要花最多心思背的参数文件。它不是用来“读”的,多数情况下是运维自己“写”的规则片。打开部署共享的 Rules 页签,最基本的一套配置长这样:
[Settings] Priority=Default Properties=MyCustomProperty [Default] OSInstall=Y UserDataLocation=NONE SkipComputerName=NO ComputerName=PC-%Random6% JoinDomain=corp.example.com DomainAdmin=MDT_Join DomainAdminPassword=P@ssw0rd TimeZone=China Standard Time UILanguage=zh-CN SkipDomainMembership=NO SkipBitLocker=YES SkipTaskSequence=NO SkipFinalSummary=YES关键参数说明:OSInstall=Y 表示全新安装操作系统的模式;UserDataLocation=NONE 跳过用户状态迁移,直接格式化;SkipComputerName=NO 说明部署时仍会设置机器名,ComputerName 用 PC-%Random6% 生成随机后缀;JoinDomain 和 DomainAdmin 是自动加入域的凭据,DomainAdmin 建议用“仅允许加入域”的专用账户;SkipBitLocker=YES 是测试期先不启用 BitLocker;SkipFinalSummary=YES 省去部署完成后的摘要提示,方便无人值守跑批。
Skip* 系列参数是这个文件里数量最多、新手最容易搞反的一类。它们的行为是“跳过某个交互界面”,所以值是 YES 时表示这个界面不出现,值 NO 表示界面出现或等待输入。我常用的是:
| 参数 | 作用 | 我的常用值 |
|---|---|---|
| SkipComputerName | 跳过计算机名输入界面 | NO,因为规则里已指定名字 |
| SkipDomainMembership | 跳过加域配置界面 | NO,自动加域 |
| SkipTaskSequence | 跳过任务序列选择界面 | NO,部署时手动选或按变量选 |
| SkipBitLocker | 跳过 BitLocker 配置 | YES,测试期 |
| SkipFinalSummary | 跳过完成摘要 | YES |
这里有个反直觉点:如果你想在部署界面上让用户确认计算机名,就不要把 SkipComputerName 设成 YES,否则脚本直接按规则里的 ComputerName 走,界面根本不出现。规则文件是“先决定,再选择是否让你看”,不是“你看了以后决定”。
如果规则还得支持多个型号和机器,Priority 可以写得复杂一些:
[Settings] Priority=Model, MACAddress, Default Properties=Model, MACAddress [Model] Latitude 5420=IsLatitude5420:TRUE [Latitude 5420] DriverSelectionProfile=Latitude5420Win11 ComputerName=LT-%SerialNumber% [MACAddress] 00:11:22:33:44:55=SpecialMachine:TRUE [SpecialMachine] JoinDomain=corp.example.com执行逻辑是:MDT 按 Priority 列出的顺序读小节,第一个“命中”的小节里的变量生效。命中方式是小节里“= 左边”的字段与采集阶段的变量值做精确匹配。[Model] 小节写Latitude 5420=IsLatitude5420:TRUE,意思是当检测到的 Model 等于“Latitude 5420”时,定义变量 IsLatitude5420 为 TRUE。接着 [Latitude 5420] 小节给这个机器指定专用驱动集和命名规则。
这一层是让 MDT 从“能装”变成“装得聪明”的关键。但优先级排错也常出问题:Priority 里先写的先命中,后面就不再看了,所以不要把 Default 放最前面,否则所有机器都会直接用默认规则,后面的型号规则全部被短路。
4.3 Bootstrap.ini:让 WinPE 阶段就连上共享
部署的第一步是 WinPE 从 WDS 下载回来并启动,但它此时是裸系统,没有 IP 和凭据。Bootstrap.ini 就是给 WinPE 阶段用的“前导配置”。文件在部署共享的 Boot 目录下,需要手工编辑,改完后生成启动镜像并更新 WDS。一个最小可用的 Bootstrap.ini 示例:
[Settings] Priority=Default [Default] DeployRoot=\\10.10.0.5\DeploymentShare$ UserID=MDT_BA UserDomain=CORP UserPassword=这里写密码 SkipBDDWelcome=YESDeployRoot 是 UNC 路径,指向部署共享;UserID / UserDomain / UserPassword 是 WinPE 用来认证并挂载该共享的账号;SkipBDDWelcome=YES 跳过 MDT 欢迎确认界面,直接进任务序列选择菜单。这是最小配置,再加键盘布局、语言、时区也可以,但 WinPE 阶段不建议放太多无关变量,因为普通变量对 WinPE 里运行的步骤不一定生效。
改完 Bootstrap.ini 之后,右键部署共享 → Update Deployment Share,选择“完全重新生成启动映像”,再把 WDS 里的旧启动映像替换成新生成的。这个过程容易遗漏,排查时如果发现改了 Bootstrap.ini 没有效果,第一件事就是确认 WDS 里的引导镜像是不是旧的。
4.4 用动态变量区分机器:型号、MAC、序列号的匹配逻辑
实际环境里几乎不存在“所有机器一个样”的情况,至少会混着几个批次的采购。MDT 里区分机器靠三个内置变量:Model(机型)、MACAddress(网卡 MAC)、SerialNumber(系统 BIOS 序列号)。它们在 WinPE 启动时通过 WMI 自动采集,不需要写代码。你要做的,是在 CustomSettings.ini 里针对这些变量建规则小节。
例如新采购的笔记本是 ThinkPad T14 Gen2,老台式机是 OptiPlex 3080,两个机型驱动和加域 OU 都不同:
[Settings] Priority=Model, Default Properties=Model [Default] DriverGroup=All Drivers ComputerName=PC-%Random6% [Model] ThinkPad T14 Gen2=IsThinkPad:TRUE [ThinkPad] DriverGroup=Win11%OSArchitecture%ThinkPad ComputerName=TB-%SerialNumber%部署到 ThinkPad 时命中了 Model 小节,变量 IsThinkPad 置为 TRUE,接着往 [ThinkPad] 小节走,指定它的驱动组和命名规则;OptiPlex 没有命中,落在 Default,用通用驱动组和随机名。注意 Model 的检测值必须与 WMI 里的值完全一致,连空格都不能差。在 WinPE 里按 F8 打开命令提示符,执行wmic computersystem get model能看到真实值,再原样复制到规则里,是稳妥做法。
5. MDT 部署踩坑笔记:这几个问题我基本每次都会遇到
5.1 PXE 引导失败,卡在网卡启动
现象:客户端开机提示“No boot filename found”,或者一直停在网卡 PXE 界面不动。 原因:最常见是 DHCP 的 066/067 选项没配置,或没配到客户端所在作用域;也可能是 WDS 未初始化,响应策略没有允许未知客户端。另一个隐藏原因是 DHCP 和 WDS 在同一台服务器时,WDS 默认监听 67 端口会与 DHCP 服务冲突,需要进入 WDS 属性,勾选“不在此服务器上监听 DHCP 端口”之类的选项。 解决:先确认 DHCP 作用域能看到 066/067,再看 WDS 控制台服务器状态是否“已启动”、响应策略是否为“响应所有客户端”。如果都正常,用抓包工具看 67/69 端口是否有请求到达服务器。链路通不通优先于 MDT 配置,不要一上来就改任务序列。
5.2 部署共享连接不上或加载超时
现象:WinPE 已经启动,但界面一直停在 Connecting to deployment share,或者报找不到网络路径。 原因:Bootstrap.ini 里 DeployRoot 写错、账号密码错误、共享目录不存在、SMB 端口被防火墙拦截。WinPE 里的网络凭据没建立时,MDT 会尝试用匿名连接,失败后就停住或弹认证框。 解决:在 WinPE 里按 F8 开命令提示符,手动执行一次net use \\10.10.0.5\DeploymentShare$ /user:CORP\MDT_BA 密码。53 号错误是找不到网络路径,检查 IP 连通和防火墙放行 445;1326 号错误是登录失败,检查域名前缀和密码。同时确认 Bootstrap.ini 改了之后重新生成了启动镜像,排除拿着旧镜像排查新配置的情况。
5.3 镜像应用失败或部署后蓝屏
现象:任务序列跑到“应用操作系统”时报 0x80004005,或者重启后直接蓝屏。 原因:多半是 WinPE 版本与操作系统镜像代差太大,比如用 Windows 10 的 WinPE 去应用 Windows 11 镜像;也可能是导入时选错 WIM 索引;还有中文路径或空格路径引发的解析失败。 解决:让 WinPE 引导镜像版本和操作系统镜像保持在同一代或更新;共享路径、镜像名称全部改英文和数字;导入时只勾选目标版本。如果仍然蓝屏,抓 MINIDUMP 看崩溃模块,常见是已经注入了不兼容驱动导致的,先用默认无驱动配置跑一次来排除。
5.4 驱动没装上或装成了别的型号的驱动
现象:部署完设备管理器里一堆感叹号,或者发现显卡驱动属于另一台机器型号。 原因:DriverSelectionProfile 没设置或被写成默认的 All Drivers,MDT 把 Out-of-Box Drivers 下所有驱动全部灌进系统。更多时候是型号规则没命中,Model 值差一个空格,导致走了 Default 规则的全量注入。 解决:先拿 WMI 的真实 Model 值去对规则,确保完全一致;把 DriverSelectionProfile 设为 Nothing,然后显式指定要注入的驱动组。这样即使匹配失败,最坏情况是没驱动,也比全量注入导致系统被装乱更好处理——少驱动的报错清晰,装错驱动的问题分析起来才是黑匣子。
5.5 计算机名、加域和分区参数不生效
现象:任务序列成功跑完,但机器名还是随机默认值,或者没有自动加入域。 原因:CustomSettings.ini 里对应参数没被消费。典型三种:优先级写错导致命中了别的分支;变量名拼写不对;任务序列里对应的“请求计算机名”步骤被禁用,参数传进来了但没有步骤去读取和设置。 解决:打开 Rules 页签,确认 Priority 顺序,把“计算机名”相关步骤启用,再验证变量解析:
cscript.exe \\10.10.0.5\DeploymentShare$\Scripts\LiteDeployment.vbs /debug:true这会在当前机器只读跑一遍任务序列,不真正改磁盘,最后在 BDD.log 里搜索 ComputerName 能看到实际解析成什么。这个技巧能定位掉大部分变量不生效的问题。日志里解析结果与预期不一致时,按优先级顺序检查命中小节即可。
6. 把部署做实:日志验证与批处理落地的进阶技巧
新建好的 MDT 环境不要直接上生产。我的习惯是先跑一台测试虚拟机,用 /debug:true 做模拟部署,确认任务序列、变量和日志都符合预期。MDT 的日志不是给人翻着玩的,是决策黑匣子:BDD.log 里每一行记录了那一刻脚本做了哪个选择、为什么。搜关键字比翻满屏状态快很多,ComputerName、DriverGroup、JoinDomain 这几个词是重点。
再往后,整个部署共享的刷新也可以脚本化。控制台操作一万次繁琐,用 PowerShell 调用 MDT 模块省心:
# 载入 MDT 提供的 PowerShell 模块 Import-Module "C:\Program Files\Microsoft Deployment Toolkit\bin\MicrosoftDeploymentToolkit.ps1" # 把部署共享映射成 PowerShell 驱动器 New-PSDrive -Name "DS001" -PSProvider MDTDeploymentShare -Root "D:\DeploymentShare" # 强制重新生成启动镜像,相当于控制台里的 Update Deployment Share Update-MDTDeploymentShare -Path "DS001:" -Force这样每次改了任务序列、导入新驱动,一条命令就能刷新整个共享。批量部署流程稳定后,我习惯在部署共享里单独留一个 Tools 文件夹,放常用排查脚本和最新驱动备份;旧镜像和旧驱动至少留两个版本当后悔药,等新镜像连跑两周没翻车再把老的清掉。这套流程我走了无数遍,希望帮到你。
本文还有配套的精品资源,点击获取