主题
生产环境 MDT + WDS 批量装机详细搭建文档
2026 状态说明
Microsoft 已宣布 Microsoft Deployment Toolkit(MDT)立即退休。现有 MDT 安装仍可继续运行,但不再获得功能更新、问题修复、安全更新或未来 Windows 版本兼容性更新。
本文因此定位为:存量环境维护、实验室、迁移过渡,以及已有 MDT/WDS 环境重建参考。新建长期生产部署平台时,应同步评估 Windows Autopilot 或 Configuration Manager OSD。
1. 配置 VMware NAT 网络
如果 Windows Server 运行在 VMware Workstation 中,先为整个实验环境准备一个独立的 NAT 网段。本教程使用 VMnet8:虚拟机通过 NAT 访问外部网络,Windows Server 负责给实验客户端提供 DHCP。VMware 自带 DHCP 必须关闭,避免两个 DHCP 服务器同时分配地址。
1.1 设置 VMnet8 为 NAT
建议先关闭实验虚拟机,再打开 VMware Workstation → 编辑 → 虚拟网络编辑器,选择 VMnet8:
如需自动配置 VMnet8,可下载下面的工具:

上图配置完后点击 NAT 设置后,进行下面的配置:

不要同时启用 VMware DHCP
VMware DHCP 和 Windows Server DHCP 同时运行时,客户端可能随机拿到错误的地址、网关或启动信息,导致 PXE 不稳定。关闭 VMware DHCP 后,必须先完成 Windows Server DHCP 角色和作用域配置,测试客户端才会获得地址。
VMware 官方通常将 VMnet8 用作 NAT 网络;实际网关地址以 NAT 设置窗口显示的值为准。VMware 虚拟网络编辑器说明
1.2 将虚拟机连接到 VMnet8
在每台参与测试的虚拟机中打开 虚拟机设置 → 网络适配器:
- 选择 自定义:VMnet8。
- 确认网卡已连接,并勾选“启动时连接”。
- Windows Server、测试客户端和其他实验虚拟机都连接到同一个
VMnet8。 - Windows Server 的 DHCP 作用域应使用
192.168.1.0/24网段,并排除 NAT 网关和主机虚拟网卡所使用的地址。
NAT 网段只负责虚拟机访问外部网络;PXE 测试客户端必须和 DHCP、WDS、MDT 服务器连接到同一个
VMnet8,否则无法从这台服务器获取 DHCP 和 PXE 响应。
2. 准备基础环境
本教程统一以 Windows Server 2025 作为部署服务器系统,并先按 §2.0 配置静态 IP 地址。
2.0 使用 PowerShell 配置静态 IP 和 DNS(加域前必做)
本教程固定使用以下实验网络参数:
| 项目 | 固定值 |
|---|---|
| Windows Server 静态 IP | 192.168.1.10 |
| 子网掩码 | 255.255.255.0(前缀长度 24) |
| 默认网关 | 192.168.1.1 |
| 域控本机 DNS | 127.0.0.1 |
| 公网 DNS 转发器 | 114.114.114.114、8.8.8.8 |
本教程的常见场景是:这台 Windows Server 2025 同时承载 AD DS、DNS、DHCP、WDS 和 MDT。公网 DNS 不能直接填写到域控网卡;域控网卡应指向本机 DNS,公网 DNS 只配置为 DNS 转发器,否则可能无法解析 AD 的域名和 _ldap._tcp 等定位记录,导致加域和 MDT 自动加域失败。微软 DNS 客户端设置最佳实践
运行前确认
以下命令会清除当前网卡的 IPv4 地址和默认路由,再写入固定值。只在这台实验服务器上执行,并确认 VMware 网络编辑器中的 VMnet8 网段确实是 192.168.1.0/24、网关是 192.168.1.1。如果服务器有多块网卡,只保留实际连接 VMnet8 的网卡处于“已连接”状态。
以管理员身份打开 PowerShell,整段执行:
本教程默认本机就是第一台域控。如果使用已有的其他域控,请将脚本中的
$LocalDNS改为该域控的内网 IP,并跳过后面的本机 DNS 转发器命令。
powershell
$ServerIP = "192.168.1.10"
$PrefixLength = 24
$Gateway = "192.168.1.1"
$LocalDNS = "127.0.0.1"
# 自动选择第一块已连接的网卡;多网卡环境只保留 VMnet8 网卡连接
$Adapter = Get-NetAdapter | Where-Object Status -eq "Up" | Sort-Object ifIndex | Select-Object -First 1
if (-not $Adapter) { throw "没有找到已连接的网卡,请先检查 VMnet8 网络适配器。" }
# 关闭 DHCP,清理旧 IPv4 地址和默认路由
Set-NetIPInterface -InterfaceIndex $Adapter.ifIndex -Dhcp Disabled
Get-NetIPAddress -InterfaceIndex $Adapter.ifIndex -AddressFamily IPv4 -ErrorAction SilentlyContinue |
Remove-NetIPAddress -Confirm:$false -ErrorAction SilentlyContinue
Get-NetRoute -InterfaceIndex $Adapter.ifIndex -AddressFamily IPv4 -DestinationPrefix "0.0.0.0/0" -ErrorAction SilentlyContinue |
Remove-NetRoute -Confirm:$false -ErrorAction SilentlyContinue
# 写入固定 IP、网关和本机 DNS
New-NetIPAddress -InterfaceIndex $Adapter.ifIndex -IPAddress $ServerIP -PrefixLength $PrefixLength -DefaultGateway $Gateway
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses $LocalDNS
Get-NetIPConfiguration -InterfaceIndex $Adapter.ifIndex2.0.1 修改计算机名称(加入域或提升域控前)
完成静态 IP 配置后、执行 §2.1 或加入已有域之前,先修改服务器名称。本教程默认使用 MDT01,这样后面的 Bootstrap.ini 示例可以直接对应;如果网络中已有同名计算机,请换成唯一名称,并同步修改后文所有 MDT01。
以本机内置管理员账户打开管理员 PowerShell,执行:
powershell
$ComputerName = "MDT01"
if ($env:COMPUTERNAME -ne $ComputerName) {
Rename-Computer -NewName $ComputerName -Force
Restart-Computer
} else {
Write-Host "计算机名称已经是 $ComputerName,无需修改。"
}如果名称发生变化,服务器会立即重启。重启后使用 MDT01\实际本地管理员账户名 登录,再继续 §2.1;如果名称没有变化,则直接继续下一步。
客户端、MDT 部署环境和其他域成员的 DNS 应通过 DHCP 统一下发为 192.168.1.10,不要下发公网 DNS。若只是域控提升前临时下载更新,可以暂时使用公网 DNS;完成域控提升后必须改回本机 DNS。
2.1 如何搭建域控制器(新建林)
本节适用于环境中还没有任何 AD 域的情况:在一台全新的 Windows Server 2025 上安装 AD 域服务角色,并将其提升为新林中的第一台域控制器。执行本节前,请先完成 §2.0.1 的计算机重命名并重新登录。
必须使用本机内置管理员账户登录
执行本节前,必须使用本机内置管理员账户登录 Windows Server,并用该账户打开管理员 PowerShell 执行域控配置。默认名称通常是 Administrator;如果该账户已经被重命名,就使用重命名后的实际名称。不要使用普通本地用户、域账户,或通过“运行方式”临时切换到其他账户来执行。
如果该内置管理员账户密码为空,Install-ADDSForest 会在前置条件检查阶段失败,提示本地管理员账户密码不符合要求。请先通过计算机管理设置密码:
- 按
Win + R,输入compmgmt.msc并回车。 - 展开 本地用户和组 → 用户。
- 找到本机内置管理员账户;如果它已重命名,按重命名后的实际名称查找。必要时可在 PowerShell 执行
whoami确认当前登录账户。 - 右键该账户,选择 设置密码,点击“继续”。
- 输入并确认一个强密码,建议同时包含大写字母、小写字母、数字和特殊字符;不要使用空密码。
- 右键该账户 → 属性,确认账户没有勾选“账户已禁用”,并确认它属于本地管理员组。
新建林时,本机内置管理员账户会转换为新域中的对应账户,并沿用这里设置的密码。后面脚本提示输入的 DSRM 密码是另一套密码,不能把两者混淆。
完成上面的密码设置后,以管理员身份打开 PowerShell,执行:
powershell
$DomainName = Read-Host "输入域名(例如 huohuo.com)"; $NetbiosName = ($DomainName -split '\.')[0].ToUpper(); Write-Host "自动识别NetBIOS名称: $NetbiosName"; Install-WindowsFeature AD-Domain-Services -IncludeManagementTools; Install-ADDSForest -DomainName $DomainName -DomainNetbiosName $NetbiosName -ForestMode WinThreshold -DomainMode WinThreshold -InstallDns:$true -SafeModeAdministratorPassword (Read-Host -AsSecureString "输入目录服务还原模式(DSRM)密码") -Force脚本会依次提示输入域名与 DSRM 密码,NetBIOS 名由域名自动推导(huohuo.com → HUOHUO)。执行完成后服务器会自动重启,重启后本机即为域控制器。
重启后再执行以下命令:
Install-ADDSForest会在域控配置完成后自动重启服务器,因此不能把 DNS 转发器命令直接接在上一条命令后面。登录系统并确认 DNS Server 服务已启动后,以管理员身份打开 PowerShell:
powershell
Set-DnsServerForwarder -IPAddress 114.114.114.114,8.8.8.8
Get-DnsServerForwarder说明:命令中的
WinThreshold是 AD 域/林功能级别参数,不代表 Windows Server 版本。这里保留兼容性优先的写法;如果是全新且所有域控制器都采用 Windows Server 2025 的林,再根据实际兼容性评估是否提升到 Windows Server 2025 功能级别。
若你的环境已有 AD 域,可跳过本节,直接进入第 3 章安装并配置 DHCP 和 WDS。
3. 安装并配置 DHCP 和 WDS
通过服务器管理器添加 DHCP 服务器与 Windows 部署服务(WDS) 角色,这是 PXE 网络启动的基础。独立模式的 WDS 不要求与 AD DS 集成;但本教程还要通过 MDT 自动加域,因此部署服务器仍需能够访问可用的 AD DS/DNS。
本教程的固定部署拓扑
本文按单机部署编写:DHCP、WDS、MDT 必须安装在同一台 Windows Server 上。AD DS/DNS 可以由本机承载,也可以使用现有域控制器;但 MDT 部署共享、WDS PXE 服务和 DHCP 地址分配不拆分到其他服务器。
powershell
Install-WindowsFeature -Name WDS,DHCP -IncludeManagementTools -Restart命令说明
-Restart 的含义是“只有安装过程判断确实需要重启时才自动重启”,不是无条件重启。如果输出 Restart Needed: No,说明角色已完成安装,可以直接继续 §3.1;如果输出 Restart Needed: Yes,系统会按参数自动重启。
如果希望无论安装结果如何都手动重启一次,安装命令完成后再单独执行:
powershell
Restart-Computer两个角色务必合并成一条 Install-WindowsFeature 命令安装,避免第一条命令重启后第二条没有机会执行。微软 Install-WindowsFeature 说明
安装后先不要初始化 WDS(初始化在 §7 用 MDT 生成的启动映像来配)。
3.1 完成 DHCP 配置
DHCP 角色安装完成后(如果确实发生了重启,登录系统后继续),还要完成 DHCP 授权、创建 IPv4 作用域,并把客户端需要的网关、AD DNS 和域名通过 DHCP 选项下发。
本教程固定使用以下作用域参数:
| 项目 | 配置值 |
|---|---|
| 作用域名称 | MDT-PXE-IPv4 |
| DHCP 地址范围 | 192.168.1.1 – 192.168.1.254 |
| 子网掩码 | 255.255.255.0 |
| 排除范围 | 192.168.1.1 – 192.168.1.99 |
| 实际动态地址池 | 192.168.1.100 – 192.168.1.254 |
| 默认网关(选项 003) | 192.168.1.1 |
| DNS 服务器(选项 006) | 192.168.1.10 |
| DNS 域名(选项 015) | §2.1 创建的实际 AD 域名 |
排除范围会避开 NAT 网关、Windows Server 静态 IP(192.168.1.10)、VMware 主机虚拟网卡及后续预留的静态地址。公网 DNS(114.114.114.114、8.8.8.8)不要填入 DHCP 的 DNS 服务器选项;客户端应先访问本机 AD DNS,再由 DNS 转发器解析公网域名。
3.1.1 完成 DHCP 授权
- 打开服务器管理器,点击右上角黄色感叹号,完成 DHCP 的安装后配置;按向导确认当前服务器的凭据和 DHCP 安全组配置。
- 打开 服务器管理器 → 工具 → DHCP。
- 展开左侧的 DHCP 服务器名称,右键服务器名称,选择 授权。
- 等待几秒后右键服务器名称,选择 刷新。服务器图标出现绿色向下箭头,表示授权成功。
在已加入 AD 域的环境中,未经授权的 DHCP 服务器不会正常向客户端租出地址;本教程的 DHCP 与域控在同一台服务器上,因此必须完成授权。
3.1.2 创建、配置并验证 IPv4 作用域
完成 §3.1.1 的 DHCP 授权后,以管理员身份打开 PowerShell,执行以下脚本:
powershell
$ErrorActionPreference = "Stop"
Import-Module DhcpServer
$ScopeId = [System.Net.IPAddress]"192.168.1.0"
$ScopeName = "MDT-PXE-IPv4"
$StartRange = [System.Net.IPAddress]"192.168.1.1"
$EndRange = [System.Net.IPAddress]"192.168.1.254"
$SubnetMask = [System.Net.IPAddress]"255.255.255.0"
$Router = [System.Net.IPAddress]"192.168.1.1"
$DnsServer = [System.Net.IPAddress]"192.168.1.10"
$ExcludeFrom = [System.Net.IPAddress]"192.168.1.1"
$ExcludeTo = [System.Net.IPAddress]"192.168.1.99"
# 自动读取本机所属的 AD DNS 域名,避免把域名写死
$ComputerSystem = Get-CimInstance -ClassName Win32_ComputerSystem
if (-not $ComputerSystem.PartOfDomain -or [string]::IsNullOrWhiteSpace($ComputerSystem.Domain)) {
throw "无法自动识别 AD 域名,请先完成 §2.1,并确认本机已提升为域控制器或已加入 AD 域。"
}
$DomainName = $ComputerSystem.Domain
# 读取现有作用域;不存在时创建并立即激活
$Scope = Get-DhcpServerv4Scope -ScopeId $ScopeId -ErrorAction SilentlyContinue
if ($null -eq $Scope) {
Add-DhcpServerv4Scope `
-Name $ScopeName `
-Description "VMnet8 PXE 实验网络" `
-StartRange $StartRange `
-EndRange $EndRange `
-SubnetMask $SubnetMask `
-LeaseDuration (New-TimeSpan -Days 8) `
-State Active
Write-Host "已创建并激活作用域:$ScopeName"
} else {
# 已有作用域必须与教程参数一致,防止误覆盖现有网络配置
$RangeMatches = (
([string]$Scope.StartRange -eq [string]$StartRange) -and
([string]$Scope.EndRange -eq [string]$EndRange) -and
([string]$Scope.SubnetMask -eq [string]$SubnetMask)
)
if (-not $RangeMatches) {
throw "作用域 192.168.1.0 已存在,但地址范围或子网掩码与本教程不一致,请先检查现有配置。"
}
Set-DhcpServerv4Scope -ScopeId $ScopeId -State Active
Write-Host "作用域已存在且参数一致,已确认处于激活状态。"
}
# 检查并创建排除范围,避免重复执行时报错
$ExclusionExists = @(
Get-DhcpServerv4ExclusionRange -ScopeId $ScopeId -ErrorAction SilentlyContinue
) | Where-Object {
([string]$_.StartRange -eq [string]$ExcludeFrom) -and
([string]$_.EndRange -eq [string]$ExcludeTo)
}
if (-not $ExclusionExists) {
Add-DhcpServerv4ExclusionRange `
-ScopeId $ScopeId `
-StartRange $ExcludeFrom `
-EndRange $ExcludeTo
Write-Host "已添加排除范围:$ExcludeFrom - $ExcludeTo"
} else {
Write-Host "排除范围已经存在,跳过创建。"
}
# 自动配置作用域选项:003 网关、006 DNS、015 DNS 域名
# 只替换这三个选项的作用域级值,不修改其他 DHCP 选项
Set-DhcpServerv4OptionValue `
-ScopeId $ScopeId `
-Router $Router `
-DnsServer $DnsServer `
-DnsDomain $DomainName
Write-Host "已配置作用域选项:003=$Router;006=$DnsServer;015=$DomainName"
# 显示最终结果
Get-DhcpServerv4Scope -ScopeId $ScopeId | Format-Table ScopeId, Name, State, StartRange, EndRange, SubnetMask, LeaseDuration
Get-DhcpServerv4ExclusionRange -ScopeId $ScopeId | Format-Table StartRange, EndRange
Get-DhcpServerv4OptionValue -ScopeId $ScopeId | Format-Table OptionId, Name, Value脚本会自动完成以下操作:
- 创建并激活
MDT-PXE-IPv4作用域。 - 设置地址范围为
192.168.1.1–192.168.1.254,租期为 8 天。 - 排除
192.168.1.1–192.168.1.99,因此实际可分配地址为192.168.1.100–192.168.1.254。 - 自动配置 003 网关为
192.168.1.1、006 DNS 为192.168.1.10、015 DNS 域名为本机自动读取的 AD 域名;如果之前填过公网 DNS,006 会被本机 DNS 替换。 - 重复执行时跳过已经存在的排除范围;若发现同一网段已有不同配置,则停止并提示,不会直接覆盖。
脚本会自动从本机读取 AD DNS 域名,因此必须在完成 §2.1、服务器已重启并且本机已加入域后执行。本教程不使用 WINS,无需配置 044/046 等 WINS 选项。
验证 DHCP 作用域与作用域选项
在 DHCP 控制台中确认:
- IPv4 下的
MDT-PXE-IPv4图标为绿色,状态为已激活。 - 地址池显示动态范围
192.168.1.100–192.168.1.254。 - 作用域选项包含:003 路由器
192.168.1.1、006 DNS 服务器192.168.1.10、015 DNS 域名(实际 AD 域名)。 - 如果需要图形化查看,打开 服务器管理器 → 工具 → DHCP,展开 服务器名称 → IPv4 → 作用域 [192.168.1.0] MDT-PXE-IPv4 → 作用域选项即可。
- 地址租用会在测试客户端成功获取地址后出现记录。
在测试客户端执行以下命令重新获取租约并查看结果:
cmd
ipconfig /release
ipconfig /renew
ipconfig /all确认客户端获得 192.168.1.100 – 192.168.1.254 范围内的地址,默认网关为 192.168.1.1,DNS 为 192.168.1.10。
本教程 DHCP、WDS、MDT 同机部署,不在 DHCP 中配置选项 066/067,也不把公网 DNS 下发给客户端。WDS 的代理 DHCP 设置和 PXE 启动选项在 §7.4 处理。微软 DHCP IPv4 作用域配置说明
同机部署提醒
DHCP 与 WDS 安装在同一台服务器时,两者会争用 UDP 67 端口,还需在 §7.4 处理端口冲突并配置 PXE 引导。本节只完成 DHCP 地址分配作用域,WDS 初始化仍延后到 §7。
4. 安装 Windows ADK 与 PE 加载项
MDT 依赖 Windows ADK 中的 Deployment Tools 来处理镜像和生成部署环境。本文默认使用面向 Windows 11 24H2 / 25H2 的路线 B:ADK 10.1.26100.2454 加对应的 Windows PE Add-on 和 servicing patch。
如果 MDT 8456 在 ADK 26100 上生成 WinPE 时出现兼容性问题,可切换到兼容性优先的路线 A:ADK 25398 加对应的 Windows PE Add-on。路线 A 只更换 WinPE 生成工具,不改变要部署的 Windows 11 版本;两条路线都只生成 x64 WinPE。
官方获取页面:ADK 下载与安装 | ADK servicing patch
4.1 自动下载并安装(推荐)
网页不能直接替部署服务器运行安装程序。请在部署服务器上以管理员身份打开 PowerShell,复制下面的完整脚本并执行。脚本会从微软官方地址下载并依次安装:
- Windows ADK 10.1.26100.2454 的 Deployment Tools。
- 与该版本匹配的 Windows PE Add-on。
- 当前适用于 ADK 10.1.26100.2454 的 ADK servicing patch KB5101684。
执行条件
- 服务器必须能够访问互联网,并且使用 x64 Windows Server 2025。
- 必须以管理员身份运行;建议在安装 MDT 之前执行。
- 安装程序默认使用 Windows Kits 的默认路径;如果已经用自定义路径安装 ADK,请按 4.2、4.3 的手动方式处理。
- 脚本不会主动重启服务器;如果安装程序提示需要重启,完成脚本后手动重启,再继续下一节。
粘贴脚本时的提示
将整段多行脚本直接粘贴到 Windows PowerShell 控制台后,如果光标停在最后一行,或左侧仍显示 >>,请再按一次 Enter 提交最后一行。这是控制台等待提交输入的正常现象,不是脚本报错;不要重复粘贴整段脚本。
powershell
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"
$WorkDir = "C:\MDT-Setup\ADK"
$LogDir = Join-Path $WorkDir "logs"
# 微软官方安装地址;短链接会自动跳转到 download.microsoft.com
$AdkUrl = "https://go.microsoft.com/fwlink/?linkid=2289980"
$WinPeUrl = "https://go.microsoft.com/fwlink/?linkid=2289981"
$AdkPatchUrl = "https://aka.ms/Windows_ADK_10.1.26100.2454_Update_KB5101684.zip"
$AdkInstaller = Join-Path $WorkDir "adksetup.exe"
$WinPeInstaller = Join-Path $WorkDir "adkwinpesetup.exe"
$AdkPatchZip = Join-Path $WorkDir "Windows_ADK_KB5101684.zip"
$AdkPatchDir = Join-Path $WorkDir "KB5101684"
$AdkPatchMarker = Join-Path $AdkPatchDir ".applied"
$AdkRoot = Join-Path ${env:ProgramFiles(x86)} "Windows Kits\10\Assessment and Deployment Kit"
$DeploymentToolsExe = Join-Path $AdkRoot "Deployment Tools\amd64\DISM\dism.exe"
$WinPeOcDir = Join-Path $AdkRoot "Windows Preinstallation Environment\amd64\WinPE_OCs"
New-Item -ItemType Directory -Path $WorkDir, $LogDir -Force | Out-Null
function Download-File {
param(
[string]$Uri,
[string]$Path
)
if (Test-Path -LiteralPath $Path) {
$ExistingFile = Get-Item -LiteralPath $Path
if ($ExistingFile.Length -ge 100KB) {
Write-Host "已存在,跳过下载:$Path"
return
}
Remove-Item -LiteralPath $Path -Force
}
Write-Host "开始下载:$Uri"
Invoke-WebRequest -Uri $Uri -OutFile $Path -UseBasicParsing
if (-not (Test-Path -LiteralPath $Path) -or (Get-Item -LiteralPath $Path).Length -lt 100KB) {
throw "下载文件无效或不完整:$Path"
}
}
function Install-Setup {
param(
[string]$Path,
[string]$Arguments,
[string]$Name
)
Write-Host "开始安装:$Name"
$Process = Start-Process -FilePath $Path -ArgumentList $Arguments -Wait -PassThru
if ($Process.ExitCode -notin @(0, 3010)) {
throw "$Name 安装失败,退出代码:$($Process.ExitCode)"
}
if ($Process.ExitCode -eq 3010) {
Write-Host "$Name 安装完成,但需要重启后生效。"
} else {
Write-Host "$Name 安装完成。"
}
}
Download-File -Uri $AdkUrl -Path $AdkInstaller
Download-File -Uri $WinPeUrl -Path $WinPeInstaller
# 只安装生成 MDT 启动映像所需的 Deployment Tools
Install-Setup `
-Path $AdkInstaller `
-Arguments "/features OptionId.DeploymentTools /norestart /quiet" `
-Name "Windows ADK Deployment Tools"
# 安装与 ADK 版本匹配的 Windows PE 组件
Install-Setup `
-Path $WinPeInstaller `
-Arguments "/features OptionId.WindowsPreinstallationEnvironment /norestart /quiet" `
-Name "Windows PE Add-on"
# 下载并应用 ADK servicing patch;成功后写入标记,重复执行不会重复应用
if (-not (Test-Path -LiteralPath $AdkPatchMarker)) {
Download-File -Uri $AdkPatchUrl -Path $AdkPatchZip
$MspFiles = @(Get-ChildItem -LiteralPath $AdkPatchDir -Filter *.msp -File -Recurse -ErrorAction SilentlyContinue)
if ($MspFiles.Count -eq 0) {
New-Item -ItemType Directory -Path $AdkPatchDir -Force | Out-Null
Expand-Archive -LiteralPath $AdkPatchZip -DestinationPath $AdkPatchDir -Force
$MspFiles = @(Get-ChildItem -LiteralPath $AdkPatchDir -Filter *.msp -File -Recurse)
}
if ($MspFiles.Count -eq 0) {
throw "ADK servicing patch 中没有找到 MSP 文件。"
}
$MsiExec = Join-Path $env:WINDIR "System32\msiexec.exe"
$AppliedPatchCount = 0
$NotApplicablePatchCount = 0
foreach ($Msp in $MspFiles) {
$PatchLog = Join-Path $LogDir ("msiexec-" + $Msp.BaseName + ".log")
$PatchArgs = "/l* `"$PatchLog`" /qn /norestart /p `"$($Msp.FullName)`""
Write-Host "正在应用 ADK servicing patch:$($Msp.Name)"
$Process = Start-Process -FilePath $MsiExec -ArgumentList $PatchArgs -Wait -PassThru
if ($Process.ExitCode -in @(0, 3010)) {
$AppliedPatchCount++
} elseif ($Process.ExitCode -eq 1642) {
# 补丁 ZIP 可能包含未安装可选功能的 MSP,例如 Appman Sequencer
$NotApplicablePatchCount++
Write-Warning "当前已安装的 ADK 功能不适用此 MSP,已跳过:$($Msp.Name)。请查看日志确认。"
} else {
throw "ADK servicing patch 安装失败,退出代码:$($Process.ExitCode)。请查看日志:$PatchLog"
}
}
if ($AppliedPatchCount -gt 0) {
New-Item -ItemType File -Path $AdkPatchMarker -Force | Out-Null
Write-Host "ADK servicing patch KB5101684 处理完成:已应用 $AppliedPatchCount 个,跳过 $NotApplicablePatchCount 个不适用 MSP。"
} else {
Write-Warning "没有 MSP 成功应用;可能已经安装过补丁,或当前 ADK 版本与补丁不匹配。请查看 $LogDir 下的日志。"
}
} else {
Write-Host "ADK servicing patch KB5101684 已处理,跳过重复安装。"
}
if (-not (Test-Path -LiteralPath $DeploymentToolsExe)) {
throw "未找到 Deployment Tools:$DeploymentToolsExe"
}
if (-not (Test-Path -LiteralPath $WinPeOcDir)) {
throw "未找到 Windows PE 组件目录:$WinPeOcDir"
}
Write-Host "ADK 与 Windows PE Add-on 已安装并验证完成。"
Write-Host "Deployment Tools:$DeploymentToolsExe"
Write-Host "WinPE 组件目录:$WinPeOcDir"脚本将安装到默认 Windows Kits 路径,并把安装日志保存在 C:\MDT-Setup\ADK\logs。如果脚本中途报错,请先查看报错内容和日志,不要直接跳过失败步骤。
如果日志中出现
Appman Sequencer ... .msp返回退出代码1642,表示该 MSP 对当前未安装的可选组件不适用。脚本会跳过这一个 MSP 并继续处理其他补丁;只要 Deployment Tools 和 WinPE 组件验证通过,就不影响本教程后续的 MDT 部署。
微软当前页面说明,ADK 10.1.26100.2454 配合补丁后支持 Windows 11 24H2/25H2 及 Windows Server 2025;ADK servicing patch 会以 ZIP 中的 MSP 文件形式发布,需通过 Windows Installer 应用。
自动脚本只覆盖本教程默认的路线 B(ADK 10.1.26100.2454)。如果改用路线 A,请按手动方式安装对应版本,不要混用两个版本的 ADK 与 WinPE 组件。
手动安装方式(备用)
4.2 手动安装 ADK(备用)
如果不能使用自动脚本,可以下载并手动安装 ADK。安装时务必勾选部署工具(Deployment Tools),这是后续生成启动映像的基础。
以管理员身份运行安装包:
图 1 — 指定安装位置

图 2 — Windows 工具包隐私

图 3 — 许可协议

图 4 — 选择安装功能(至少勾选 Deployment Tools)

4.3 手动安装 ADK PE
官方下载入口:https://learn.microsoft.com/en-us/windows-hardware/get-started/adk-install
- 下载与 ADK 10.1.26100.2454 配套的
adkwinpesetup.exe。 - 以管理员身份运行安装程序。
- 安装位置建议保持默认。
- 完成安装后,确认 ADK PE 文件已安装。
- 如果没有使用 4.1 的自动脚本,请按微软当前 servicing 说明下载并应用 ADK 补丁。
4.4 安装后验证
完成 ADK 与 Windows PE Add-on 安装后,打开 Windows 设置 → 应用 → 安装的应用
图 5 — 在「设置 → 应用 → 安装的应用」中确认 ADK 与 WinPE Add-on 条目

5. 安装 Microsoft Deployment Toolkit(MDT)
MDT 安装在与 DHCP、WDS 相同的这台部署服务器上。后续 D:\DeploymentShare 由本机的 MDT 管理,并由本机 WDS 发布其中的 LiteTouch 启动映像。
Legacy / 已退休组件
MDT 已被 Microsoft 立即退休,不再获得支持、修复、安全更新或未来 Windows 版本兼容性更新。 继续安装 MDT 8456 的目的,是维护已有环境或搭建传统部署实验 / 过渡环境。
5.1 安装 MDT 8456 x64
安装包下载
下载 MicrosoftDeploymentToolkit_x64.msi
- 下载 x64 安装包
MicrosoftDeploymentToolkit_x64.msi。 - 以管理员身份运行 MSI 安装包。
- 接受许可协议,安装路径保持默认即可。
- 完成安装后,从开始菜单打开 Deployment Workbench。
- 建议使用管理员权限启动 Deployment Workbench,并确认控制台能正常打开。
安装包:
MicrosoftDeploymentToolkit_x64.msi版本:8456
下载包留存建议
由于 MDT 已退休,Microsoft 已提示官方分发包未来可能被移除或弃用。如企业仍需维护 MDT,应按内部软件资产和安全规范留存安装介质、校验值与版本记录,不要从不可信第三方站点获取安装包。
6. 配置 MDT Deployment Share(核心)
6.1 创建部署共享
- Deployment Workbench → 右键 Deployment Shares → New Deployment Share。
- 路径:
D:\DeploymentShare(单独数据盘)。 - 共享名:
DeploymentShare$(保持默认)。 - 描述随意。
- 向导里勾选以下选项(决定是否在部署向导中提问):
- ☐ Ask for a computer name(取消)
- ☐ Ask to join a domain or workgroup(取消)
- ☐ Ask for Domain and OU(取消)
- ☐ Migrate user data(取消)
- ☐ Ask for BitLocker(取消)
- 完成后生成
D:\DeploymentShare。
6.2 制作自定义镜像
自定义镜像应在一台专用的参考虚拟机中制作。参考机只负责生成通用 WIM,不要加入生产域,也不要提前安装具体机型的驱动;机型驱动统一在第 6.4 节由 MDT 注入。
镜像只保留所有目标电脑都需要的内容。计算机名、静态 IP、域加入、域组策略、机型驱动、BitLocker、部署账号和个人数据都不要固化到 WIM 中,分别交给 MDT、域控或目标机部署阶段处理。
6.2.1 预装软件与组策略配置
这一步在参考机中完成。建议使用与目标电脑一致的系统版本,使用本地管理员完成安装和测试;不要登录个人 Microsoft 账户,也不要把参考机加入域。
先完成软件安装和策略配置,再进行清理、Sysprep 和 WIM 捕获。这样后面的通用化步骤只负责删除设备唯一信息,不会遗漏需要写入基础镜像的公共内容。
设置电源计划为“卓越性能”
如果部署环境希望优先保证虚拟机和台式机的性能,可在参考机中以管理员身份打开 PowerShell,把下面整行命令一次性复制并执行。命令会先查找已有的“卓越性能”计划;如果计划尚未显示,则复制系统模板后再启用,同时设置熄屏时间并输出当前活动计划:
powershell
$g=[regex]::Match([string](powercfg /list | Select-String "Ultimate Performance|卓越性能" | Select-Object -First 1),"(?i)[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}").Value; if(-not $g){$g=[regex]::Matches((powercfg /duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61 2>&1 | Out-String),"(?i)[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}") | Select-Object -Last 1 | ForEach-Object Value}; if(-not $g){throw '未找到或无法创建卓越性能电源计划,请执行 powercfg /list 检查。'}; powercfg /setactive $g; powercfg /change monitor-timeout-dc 20; powercfg /change monitor-timeout-ac 0; powercfg /getactivescheme只需执行这一条命令并回车一次。命令中的字符串使用普通 ASCII 引号,避免从网页复制时中文弯引号导致 PowerShell 出现 UnexpectedToken。确认最后输出的活动计划名称为卓越性能(Ultimate Performance)。其中 monitor-timeout-dc 20 表示电池供电时 20 分钟关闭屏幕,monitor-timeout-ac 0 表示接通电源时永不自动关闭屏幕;这两个设置只修改熄屏时间,不修改系统睡眠时间。/duplicatescheme 只负责复制电源计划,/setactive 才会将它设为当前计划;它不会修改 BIOS,也不是 CPU 超频。卓越性能会减少部分节能行为,笔记本可能增加耗电、发热和风扇噪声;如果同一镜像还要部署到电池设备,应改为在 MDT 或电源策略中按机型决定。微软:Powercfg 命令行选项
需要放进基础镜像的软件
只安装每台目标电脑都必须使用、且版本变化不频繁的软件。软件应使用官方安装包,并在安装后重启、打开测试,确认没有安装失败或待处理的重启任务。
组策略的处理原则
在参考机中按 Win + R,输入 gpedit.msc,只设置所有目标电脑都适用的通用本地策略。先保留当前策略备份,再执行 gpupdate /force,用 gpresult /r 检查结果。
以下内容不要写入基础镜像:域密码和服务账号、固定本地管理员密码、密码/锁定策略、域证书私钥、静态 IP 和 DNS、计算机名称、映射盘和打印机、组织代理、WSUS 地址、BitLocker 密钥,以及只适用于某个部门或机型的策略。这些内容应放在域 GPO、MDT 规则或任务序列中。
可选:使用 Microsoft 安全基线整理组策略
如果需要统一安全策略,可下载与目标 Windows 11 版本匹配的 Microsoft Security Compliance Toolkit 和 Windows 11 安全基线,先用 Policy Analyzer 检查冲突,再在参考机副本上用 LGPO 测试。不要把 Windows Server 2025 安全基线直接导入 Windows 11,也不要未经测试一次性导入整套策略。Microsoft Security Compliance Toolkit · Windows 安全基线
如果需要保留本地策略的回滚点,在不参与捕获的 D: 数据盘或外置盘中执行 LGPO.exe /b D:\MDT-Image-Work\LGPO-Backup /n "Win11-Base";不要把备份目录放在将要捕获的系统盘中。导入测试备份时使用 LGPO.exe /g D:\MDT-Image-Work\LGPO-Backup,然后执行 gpupdate /force。
建议验证登录、网络访问、Windows Update、业务软件、打印、远程管理和 MDT 加域流程;通过后,优先将长期维护的策略迁移到域 GPO,避免每次更新镜像都要重新维护本地策略。
6.2.2 清理镜像与捕获前检查
- 卸载仅用于测试的软件,删除桌面、下载目录、临时文件、浏览器登录信息、个人文件和临时测试账户。
- 确认参考机没有加入域、没有连接工作或学校账户,也没有保存 Wi-Fi、VPN、代理和组织证书私钥。
- 执行 Windows Update,完成需要的重启;安装程序和日志不要留在镜像中。
- 用
manage-bde -status检查系统盘。如果系统盘已启用 BitLocker 或设备加密,应先关闭/解密,或确保 WinPE 能够解锁后再捕获。 - 保存一份参考机快照,并记录镜像版本、Windows 内部版本、已安装软件及其版本。后续更新从快照重新制作,不要在已经通用化并启动过的系统上继续修改。
完成上述人工清理后,以管理员身份打开 PowerShell,将下面整行命令复制并执行一次。该命令只读取状态,不会自动删除文件、账户或修改 BitLocker:
powershell
Get-ComputerInfo | Select-Object WindowsProductName,WindowsVersion,OsBuildNumber,OsArchitecture; Get-NetFirewallProfile | Select-Object Name,Enabled; Get-Service wuauserv,MpsSvc -ErrorAction SilentlyContinue | Select-Object Name,Status,StartType; gpresult /r; manage-bde -status确认命令输出的系统版本、网络防火墙、更新服务、本地策略和 BitLocker 状态符合预期后,再执行下一步 Sysprep。微软建议先在运行中的参考设备(审核模式)中加入应用和自定义项,完成后再通用化并捕获镜像。微软:修改 Windows 映像
6.2.3 执行 Sysprep 通用化
进入参考机桌面后按 Win + R,输入 sysprep 并按回车,打开“系统准备工具”。也可以直接运行 C:\Windows\System32\Sysprep\Sysprep.exe。按下面方式设置:
- 系统清理操作选择进入系统全新体验(OOBE)。
- 勾选通用。
- 关机选项选择关机,不要选择重新启动。
- 点击确定,等待 Sysprep 完成并自动关机。
图 6 — Sysprep 通用化设置示意图

也可以以管理员身份打开命令提示符,执行等效命令:
cmd
C:\Windows\System32\Sysprep\Sysprep.exe /generalize /oobe /shutdown参数作用:
/generalize:删除 SID 和硬件相关的唯一信息,使镜像可部署到其他电脑。/oobe:部署后的客户端首次启动时进入 Windows 初始设置阶段,后续由 MDT 应答文件继续完成配置。/shutdown:通用化完成后自动关机,便于立即进入 WinPE 捕获。
计算机关机后,不要再次从参考机的 Windows 系统盘启动,应直接切换到 WinPE。重新进入已通用化的 Windows 会开始 specialize / OOBE 阶段,需要再次执行 Sysprep 后才能捕获。
如果 Sysprep 失败,先检查以下日志:
text
C:\Windows\System32\Sysprep\Panther\setuperr.log
C:\Windows\System32\Sysprep\Panther\setupact.log详细参数可参考微软 Sysprep 命令行说明。
6.2.4 在 WinPE 中捕获 WIM
Sysprep 关机后,从 WinPE 启动参考虚拟机。捕获方式选择一种即可:使用下面视频中的 Dism++ 图形界面,或使用微软 DISM 命令。
方法一:使用 Dism++
- 在 WinPE 中打开 Dism++,选中已经通用化的离线 Windows 系统。
- 进入恢复功能 → 系统备份。
- 将保存位置设置到另一块数据盘或网络共享。
- 镜像名称建议填写
Windows 11 Custom,文件名建议使用Windows11-Custom.wim。 - 开始捕获并等待完成,不要中断虚拟机或断开保存镜像的磁盘。
方法二:使用 DISM
先确认 WinPE 中各分区的盘符。WinPE 下的 Windows 分区不一定是 C::
cmd
diskpart
list volume
exit下面示例假设 Windows 分区是 C:,保存镜像的数据盘是 D:。如果实际盘符不同,必须先修改变量:
cmd
set OSDrive=C:
set ImageDrive=D:
md %ImageDrive%\Images
dism /Capture-Image /ImageFile:%ImageDrive%\Images\Windows11-Custom.wim /CaptureDir:%OSDrive%\ /Name:"Windows 11 Custom" /Description:"Windows 11 custom reference image" /Compress:max /CheckIntegrity /Verify/Compress:max 会减小 WIM 文件体积,但捕获时间更长;/CheckIntegrity 和 /Verify 用于检查映像完整性。完整参数可参考微软 DISM Capture-Image 说明。
6.2.5 验证捕获结果
捕获完成后,不要立即删除参考虚拟机。先验证 WIM 是否能够读取:
cmd
dism /Get-WimInfo /WimFile:D:\Images\Windows11-Custom.wim确认命令能够列出镜像索引、名称和 Windows 版本,并检查 WIM 文件大小是否合理。验证通过后,将 WIM 复制到 MDT 服务器的安全存储位置,再进入 6.3 导入操作系统。
推荐保留
保留 Sysprep 前的虚拟机快照、最终 WIM 和对应的 SHA-256 校验值。以后更新软件或补丁时,从快照继续制作新版本,不要在已经通用化并启动过的镜像上反复修改。
6.3 导入操作系统
下面是一段实操演示视频:
- 右键 Deployment Shares → Import Operating System。
- 选 Custom image file,指向你自定义为.wim后缀的镜像文件。
- 这一步保持默认
- 目录名任意。
- 然后等待导入完成。
6.4 导入驱动
生产环境建议按机型隔离驱动,避免不同型号之间互相污染。
6.4.1 确认电脑型号
优先使用 PowerShell 查看制造商和型号:
powershell
Get-CimInstance Win32_ComputerSystem | Select-Object Manufacturer,Model旧版系统也可以使用:
powershell
wmic computersystem get manufacturer,model也可以使用 Win + R → 输入 msinfo32 → 查看“系统型号”。
记录输出结果,后续目录名称应尽量与 Model 值完全一致。
6.4.2 创建机型驱动目录
在 Deployment Workbench 中进入:
text
Out-of-Box Drivers → 右键 → New Folder本方案按型号直接创建目录:
text
Out-of-Box Drivers
├── Latitude 5420
└── ThinkPad T14目录名必须与 MDT 收集到的 %Model% 值一致。
6.4.3 导入驱动包
- 下载对应机型的官方驱动包。
- 将驱动包解压到临时目录。
- 在对应机型目录上右键,选择 Import Drivers。
- 指向该机型驱动包的解压目录。
- 等待 MDT 扫描并导入
.inf驱动文件。
驱动包建议只导入对应机型和对应 Windows 版本的驱动,不要把多个型号的驱动混在同一个目录中。
常用驱动包地址:
- HP:https://hpia.hpcloud.hp.com/downloads/driverpackcatalog/HP_Driverpack_Matrix_x64.html
- Dell:https://www.dell.com/support/kbdoc/zh-cn/000180534/戴尔系列驱动程序包
6.4.4 选择驱动注入方案
两种方案只能选一种。不要同时配置 DriverGroup001 和 DriverSelectionProfile,否则驱动范围可能叠加。
快速选择
机型少、目录简单时,优先使用 DriverGroup 方案;机型较多、需要组合公共驱动或精确控制驱动范围时,使用 Selection Profile 方案。
| 方案 | 核心配置 |
|---|---|
| DriverGroup 方案 | DriverGroup001=%Model%;Inject Drivers 的 Selection Profile 设置为 Nothing |
| Selection Profile 方案 | DriverSelectionProfile=%Model%;由变量动态选择 Profile |
6.4.5 方案一:使用 DriverGroup 注入驱动
本方案使用 DriverGroup001 按型号选择驱动,因此不需要为每个型号单独创建 Selection Profile。
优点:
- 配置简单,新增机型时只需新增对应目录。
- 规则集中在
CustomSettings.ini中,便于统一管理。
缺点:
- 依赖
%Model%与目录名完全匹配。 - 对品牌区分、公共驱动和复杂目录控制较弱。
适用场景:
机型数量较少、目录结构简单的部署环境。
在任务序列中找到:
text
Preinstall → Inject Drivers将 Choose a selection profile 设置为:
text
Nothing这样 MDT 才会主要按照 CustomSettings.ini 中的驱动组配置注入驱动:
ini
DriverGroup001=%Model%Selection Profile 和 DriverGroup 是叠加关系。如果保留默认 Selection Profile,可能会把大量无关驱动一起纳入部署。
6.4.6 方案二:使用 Selection Profile 注入驱动
如果不想使用 DriverGroup001,也可以为每个机型创建一个 Selection Profile,并让 MDT 根据 %Model% 自动选择对应 Profile。
优点:
- 可视化管理,能够精确选择驱动子目录。
- 适合组合公共驱动和机型专属驱动。
缺点:
- 需要维护多个 Selection Profile。
- Profile 名称必须与
%Model%变量匹配,配置复杂度较高。
适用场景:
机型较多,或需要精细控制驱动范围的部署环境。
进入 Advanced Configuration → Selection Profiles。
为每个机型创建一个 Profile,名称必须与 MDT 的
Model值一致,例如:textLatitude 5420 ThinkPad T14每个 Profile 只勾选对应的机型驱动目录。
在
CustomSettings.ini中使用:iniDriverSelectionProfile=%Model%在任务序列的 Preinstall → Inject Drivers 中,将 Choose a selection profile 设置为
Nothing,让DriverSelectionProfile动态变量接管选择。
采用此方案时,应删除或停用下面这条配置,避免 DriverGroup 和 Selection Profile 叠加:
ini
DriverGroup001=%Model%6.4.7 验证驱动匹配
部署前确认以下内容:
- 目标电脑的
%Model%值已准确记录。 - 驱动目录名称与
%Model%完全一致。 - 任务序列启用了 Inject Drivers。
- Choose a selection profile 设置为
Nothing。 - 根据实际选择的方案检查对应配置,不能两套同时启用:
- DriverGroup 方案:
CustomSettings.ini使用DriverGroup001=%Model%,并删除或停用DriverSelectionProfile。 - Selection Profile 方案:
CustomSettings.ini使用DriverSelectionProfile=%Model%,并删除或停用DriverGroup001;Profile 名称与%Model%完全一致。
- DriverGroup 方案:
部署完成后,在设备管理器中确认没有黄色感叹号。
6.5 导入应用程序(可选)
Applications → New Application:
- 选 Application with source files(保持默认)。
- 输入软件名称
- 指向安装包位置(安装包必须在文件夹内,文件夹名称必须的安装包名称一样包含后缀)
- 保持默认
- 填入软件的静默安装参数,如微信:WeChatSetup.exe /S
- 一直下一步即可
6.6 创建任务序列(Task Sequence)
- Task Sequences → New Task Sequence。
- ID:
WIN11-PRO(自定义),Name:Windows 11 专业版 标准部署。 - Template 选 Standard Client Task Sequence。
- 选刚导入的 Win11 OS。
- 默认。
- Full Name 填实际使用者或自定义名称,Organization 填公司名;Edge 主页默认空白,可改为想要访问的地址。
- 设置目标电脑本地管理员账户密码,账户名称按实际部署需求自定义。
- 一直下一步完成配置
6.7 任务序列各阶段说明
标准客户端任务序列通常按以下顺序执行:
| 阶段 | 执行环境 | 主要作用 |
|---|---|---|
| Initialization | WinPE / Windows | 初始化 MDT 环境,读取部署规则和变量。 |
| Validation | WinPE | 检查内存、CPU、电池、网络及部署前提条件。 |
| State Capture | WinPE 或 Windows | 使用 USMT 捕获用户状态;全新装机通常不需要此阶段。 |
| Preinstall | WinPE | 执行安装前准备,包括磁盘分区、驱动注入和离线配置。 |
| Install | WinPE | 将 WIM/ESD 操作系统映像应用到目标磁盘,或运行升级安装程序。 |
| Postinstall | WinPE | 对已写入磁盘的系统进行离线收尾配置,然后重启进入 Windows。 |
| State Restore | Windows | 在进入 Windows 后恢复用户状态、安装应用、更新系统并完成策略配置。 |
Preinstall 阶段的典型步骤
- Gather local only:收集本地用户配置。
- New Computer only:新计算机部署时执行的状态捕获规则。
- Validate:再次检查硬件、磁盘和部署条件。
- Format and Partition (BIOS/UEFI):根据固件类型将磁盘初始化为 MBR 或 GPT。
- Copy Scripts:将 MDT 脚本及自定义脚本复制到本地。
- Offline User State Capture:在 WinPE 中使用 USMT 离线捕获用户数据。
- Refresh only:刷新当前计算机时执行的状态捕获规则。
- Configure:配置网络、磁盘及相关部署参数。
- Enable BitLocker (Offline):在 Windows 尚未启动时执行 BitLocker 的离线配置。
- Inject Drivers:注入存储控制器、网卡及其他硬件驱动。
- Apply Patches:向离线 Windows 映像注入更新补丁。
- Next Phase:标记当前阶段完成,并准备重启进入下一阶段。
Install 阶段
- Install Operating System:将选定的 Windows 映像应用到目标磁盘。
- Next Phase:标记操作系统安装阶段完成。
Postinstall 阶段
此阶段仍在 WinPE 中执行。系统映像已经写入磁盘,但尚未进入完整的 Windows 运行环境。
- Copy Scripts:将 MDT 脚本和自定义脚本复制到目标系统,例如
%OSDisk%\\Scripts。 - Configure:向目标系统应用
Unattend.xml,完成网络、磁盘等离线配置。 - Add Windows Recovery (WinRE):添加 Windows 恢复环境,用于系统修复和重置。
- Next Phase:完成离线配置并重启进入 Windows。
State Restore 阶段
此阶段已进入 Windows,适合执行必须依赖完整系统环境的在线操作。
- Restore User State:恢复之前捕获的用户状态。
- Install Applications:安装 Applications 节点中指定的软件。
- Windows Update (Pre-Application Installation):安装应用前执行 Windows 更新。
- Windows Update (Post-Application Installation):安装应用后再次执行 Windows 更新。
- Enable BitLocker:在 Windows 环境中启用 BitLocker。
- Apply Local GPO Package:应用本地组策略包。
注意:应用程序安装、Windows Update、在线 BitLocker 和本地 GPO 均属于 State Restore,不属于 Postinstall。Postinstall 仍运行在 WinPE 中,主要负责离线配置。
6.8 配置规则(CustomSettings.ini / Bootstrap.ini)
MDT 的规则配置决定部署向导显示哪些页面、是否自动命名和加域、如何匹配驱动,以及部署结束后的动作。主要涉及两个配置文件:
- CustomSettings.ini:客户端连接部署共享后读取,控制部署流程和部署参数。
- Bootstrap.ini:WinPE 启动后最先读取,负责定位并连接 MDT Deployment Share。
6.8.1 CustomSettings.ini
在 MDT Deployment Share 上右键 → Properties → Rules 选项卡,即可编辑。
下面是本教程当前采用的基础配置。每条注释都放在对应规则条目的同一行末尾,便于阅读和排错。
ini
[Settings]
Priority=Default ; 指定 MDT 读取的默认规则区域
[Default]
SkipBDDWelcome=YES ; 跳过 MDT 欢迎页面
SkipTaskSequence=NO ; 保留任务序列选择页面
SkipComputerName=YES ; 跳过计算机名称输入页面
SkipAdminPassword=YES ; 跳过本地 Administrator 密码输入页面
SkipProductKey=YES ; 跳过产品密钥输入页面
SkipDomainMembership=NO ; 保留域加入设置页面
SkipLocaleSelection=YES ; 跳过语言和区域设置页面
SkipTimeZone=YES ; 跳过时区设置页面
SkipApplications=NO ; 保留应用程序选择页面
SkipAppsOnUpgrade=YES ; 升级部署时跳过应用选择页面
SkipUserData=YES ; 跳过用户数据迁移页面
SkipComputerBackup=YES ; 跳过计算机备份页面
SkipBitLocker=YES ; 跳过 BitLocker 设置页面
SkipCapture=YES ; 跳过镜像捕获页面
SkipSummary=YES ; 跳过部署摘要确认页面
SkipFinalSummary=YES ; 跳过最终完成摘要页面
OSInstall=YES ; 允许执行操作系统部署
_SMSTSORGNAME=MDT Deployment ; 设置 MDT 部署界面显示的组织名称
UserDataLocation=NONE ; 不迁移旧用户数据
DoCapture=NO ; 不执行 WIM 镜像捕获
SLShareDynamicLogging=\\MDT01\DeploymentShare$\Logs ; 部署过程中实时写入日志
SLShare=\\MDT01\DeploymentShare$\Logs ; 部署完成后汇总日志
FinishAction=REBOOT ; 部署完成后自动重启
UILanguage=zh-CN ; 使用简体中文系统界面语言
UserLocale=zh-CN ; 使用中国区域格式
InputLocale=zh-CN ; 使用中文(简体)默认输入区域
SystemLocale=zh-CN ; 使用中文(简体)系统区域设置
KeyboardLocale=zh-CN ; 使用中文(简体)默认键盘布局
KeyboardLocalePE=zh-CN ; 使用中文(简体)WinPE 键盘布局
TimeZoneName=China Standard Time ; 使用中国标准时间
JoinDomain=huohuo.com ; 指定目标 Active Directory 域
DomainAdmin=Administrator ; 指定用于加域的账号
DomainAdminDomain=HUOHUO ; 指定加域账号所属的 NetBIOS 域名
DomainAdminPassword=qwertyuiop!1 ; 指定加域账号密码
OSDComputerName=HH-%SerialNumber% ; 使用设备序列号作为计算机名
DriverGroup001=%Model% ; 按设备 Model 变量选择对应的驱动目录日志会保存到 \MDT01\DeploymentShare$\Logs。使用前请在 D:\DeploymentShare\Logs 创建 Logs 文件夹,并确认访问部署共享的账号具有写入权限;部署完成后可以直接在该目录查看客户端日志。
6.8.2 Bootstrap.ini
在 Deployment Share 属性中点击 Edit Bootstrap.ini。它在 WinPE 启动阶段使用,决定客户端连接哪个部署共享。
对应文件为 D:\DeploymentShare\Control\Bootstrap.ini。修改后需要执行 Update Deployment Share,再将新生成的 LiteTouchPE_x64.wim 同步到 WDS。
ini
[Settings]
Priority=Default ; 指定 MDT 读取的默认规则区域
[Default]
DeployRoot=\\MDT01\DeploymentShare$ ; 指定 MDT 部署共享的网络路径
UserDomain=HUOHUO ; 指定共享访问账号所属的域
UserID=Administrator ; 指定访问 Deployment Share 的账号
UserPassword=qwertyuiop!1 ; 指定共享访问账号密码
SkipBDDWelcome=YES ; 跳过 MDT 欢迎页面
KeyboardLocale=zh-CN ; 使用中文(简体)默认键盘布局安全建议:本示例为便于实验使用同一个域 Administrator 账号访问共享并执行加域。生产环境不要使用域管理员账号进行批量部署,应拆分为“共享读取账号”和“加域账号”,分别只授予部署共享读取权限与目标 OU 的计算机账户权限,并按组织规范轮换密码。
6.9 生成启动映像(Update Deployment Share)
- 右键MDT Deployment Shares → Update Deployment Share。
- 选 Completely regenerate the boot images(首次或改了 Bootstrap 后必须完全重建)。
- 完成后在
D:\DeploymentShare\Boot\生成:LiteTouchPE_x64.wim(WDS 用)LiteTouchPE_x64.iso(备用,U 盘/ISO 启动)
7. 配置 WDS
7.1 初始化 WDS
服务器显示“未配置”,说明 WDS 角色已经安装,但尚未完成初始化。首次使用 WDS 必须先完成配置向导。
7.1.1 打开配置向导
- 打开 服务器管理器。
- 选择 工具 → Windows 部署服务。
- 展开左侧的 服务器。
- 右键当前服务器,选择 配置服务器。
7.1.2 选择服务器模式
在“安装选项”页面选择:
text
独立服务器本教程选择独立服务器模式,适合以下场景:
- 希望 WDS 自己维护 PXE 客户端和启动配置,不依赖 AD DS 中的预配置计算机账户。
- 实验室、测试环境,或需要先把 PXE 流程跑通的过渡环境。
- 希望将 WDS 的 PXE 服务与 MDT 的部署规则分开管理。
注意:独立服务器只改变 WDS 的客户端和配置管理方式,不会取消 MDT 的域加入能力。部署过程中,目标电脑仍可以通过 CustomSettings.ini 和任务序列加入域;但服务器本身仍需满足共享访问、DNS、DHCP 和 PXE 通信要求。WDS 的独立模式也支持维护自己的设备数据库。微软 WDS 客户端管理说明
7.1.3 指定远程安装目录
设置远程安装文件夹:
text
D:\RemoteInstall不要与 MDT 部署共享使用同一个目录:
text
D:\DeploymentShare
D:\RemoteInstall两个目录用途不同:
DeploymentShare:保存 MDT 规则、任务序列、驱动、应用和 LiteTouch 文件。RemoteInstall:保存 WDS 的 PXE 启动文件和 WDS 启动映像。
远程安装目录应使用本机 NTFS 路径,并确保所在磁盘有足够空间。向导完成后,WDS 会创建相关文件夹和共享,例如 REMINST$。
7.1.4 代理 DHCP 服务器
如果当前服务器同时运行了 Microsoft DHCP,向导会显示“代理 DHCP 服务器”页面。按截图保留以下两个选项:
- ☑ 不侦听 DHCP 和 DHCPv6 端口
- ☑ 配置代理 DHCP 的 DHCP 选项
这两个选项分别用于解决 DHCP 与 WDS 争用 DHCP 端口的问题,并让 DHCP 向客户端声明 PXE/代理 DHCP 信息。Microsoft DHCP 会继续负责分配 IP 地址,WDS 负责 PXE 启动响应。微软关于 WDS 与 DHCP 共存的说明
本教程固定采用 DHCP、WDS、MDT 同机部署,因此按截图同时勾选这两个选项。Microsoft DHCP 继续负责分配 IP 地址,WDS 通过代理 DHCP 提供 PXE 启动信息;不要把 DHCP 或 WDS 拆到另一台服务器。
7.1.5 设置 PXE 响应策略
在 PXE 响应设置中选择:
text
响应所有客户端计算机(已知和未知)本教程使用独立服务器模式,建议先选择此项。所有符合条件的 PXE 客户端都可以收到 WDS 响应,便于首次部署和排查网络启动问题。
如果需要限制未知设备,可以选择:
text
仅响应已知客户端计算机独立服务器模式下,应提前在 WDS 自己的设备数据库中登记或审批客户端;不要把“已知客户端”理解为必须在 Active Directory 中预配置计算机账户。微软 WDS 响应策略说明
建议:
- 独立服务器首次部署:响应所有已知和未知客户端。
- 独立服务器正式环境:按需要登记设备后,仅响应已知客户端。
- 单机部署:确保客户端与这台部署服务器处于可互通的同一网络,并且同一网段不要再有其他 PXE 服务响应。
7.1.6 完成初始化后的检查
完成向导后确认:
- WDS 控制台中的服务器状态不再显示“未配置”。
D:\RemoteInstall目录已经创建。REMINST$共享已经存在。- Windows Deployment Services 服务正在运行。
- DHCP 服务已经授权,作用域已启用并能正常分配地址。
- 防火墙允许 DHCP、TFTP 和 PXE 所需通信。
- 此时不要添加原版
boot.wim,下一步添加 MDT 生成的LiteTouchPE_x64.wim。
使用 PowerShell 检查 WDS 服务:
powershell
Get-Service WDSServer正常状态应为:
text
Status : Running使用 WDS 命令查看服务器配置:
powershell
wdsutil /Get-Server /Show:Config完成初始化后,进入 §7.2 添加:
text
D:\DeploymentShare\Boot\LiteTouchPE_x64.wimWDS 负责 PXE 和 TFTP 分发,真正的 MDT 部署逻辑来自 LiteTouch 启动映像。微软 PXE/WinPE 配置说明
7.1.7 WDS 服务没有及时响应
配置向导在“任务进度”页面启动 WDS 时,可能出现:
服务没有及时响应启动或控制请求。
在本教程的单机部署场景中,常见原因是 Windows Deployment Services 服务没有自动启动,仍处于停止状态。这不一定表示 RemoteInstall 或 MDT 启动映像损坏,可以先手动启动服务。
- 关闭或完成配置向导,回到 Windows 部署服务 控制台。
- 右键服务器名称,选择 所有任务 → 启动。
- 等待服务器状态变为已启动,再点击刷新。

为避免服务器重启后再次出现同样问题,打开 services.msc,找到 Windows Deployment Services,将“启动类型”设置为:
text
自动也可以使用管理员 PowerShell 设置并立即启动:
powershell
Set-Service -Name WDSServer -StartupType Automatic
Start-Service -Name WDSServer
Get-Service -Name WDSServer确认返回的状态为 Running 后,再继续 §7.2 添加 MDT 的 LiteTouchPE_x64.wim。
7.2 添加 MDT 启动映像
WDS → 服务器 → Boot Images → 右键 Add Boot Image →指向 D:\DeploymentShare\Boot\LiteTouchPE_x64.wim → 命名 MDT LiteTouch Win11 (x64)。
这是关键一步:WDS 不再用自己的
boot.wim,而是用 MDT 生成的 LiteTouchPE,部署逻辑才完整。
7.3 配置启动(UEFI/安全启动)
- WDS 默认会为 x64 UEFI 提供
wdsmgfw.efi,LiteTouchPE 由 Microsoft 签名,安全启动可用,无需关 Secure Boot。 - 确认客户端 BIOS 设 UEFI + 网络启动(PXE over IPv4) 优先。
7.4 DHCP 与 WDS 同机配置
本教程中 DHCP、WDS、MDT 全部在同一台服务器,因此不配置 DHCP 选项 066/067,也不使用 DHCP Relay。
完成 WDS 配置向导后,打开 WDS → 服务器属性 → DHCP 选项卡,确认:
- ☑ Do not listen on DHCP ports
- ☑ Configure DHCP option 60 to "PXEClient" (同时确认 DHCP 服务已授权、作用域已启用并且地址池可用)
如果 DHCP 与 WDS 同机但未启用上述设置,常见结果是 DHCP 地址可以正常分配,但 PXE 客户端无法获得 WDS 启动响应。微软说明:DHCP 与 WDS 共用服务器时,WDS 不应继续占用 DHCP 使用的端口。微软 WDS 与 DHCP 共存说明
8. 域加入权限委派(改用普通账号时)
当前示例使用域 Administrator 账号加域,且未在 CustomSettings.ini 中指定 MachineObjectOU,Windows 默认会将新计算机账户放入域的 Computers 容器,因此无需额外委派权限。只有改用普通域账号并需要使用自定义 OU 时,才执行以下委派,并在规则中重新加入 MachineObjectOU。
- AD 用户和计算机 → 建 OU
WDS_Computers。 - 右键 OU → 委派控制 → 添加实际加域账号 → 选“创建、删除以及管理计算机账户”并勾选“将计算机加入域”。
- 按组织策略管理实际加域账号的密码与过期策略,优先使用托管服务账号或其他低权限方案。
- 部署共享 NTFS:给实际共享访问账号及运维组授予所需权限;
DeploymentShare$不向普通用户开放。
9. Win11 24H2(ADK 26100)WinPE 生成坑的规避
9.1 打开 Windows PE 选项卡时 MMC 管理单元崩溃
现象
在 Deployment Workbench 中打开 Deployment Share → Properties → Windows PE 时,出现:
MMC 在一个管理单元检测到错误,将卸载此管理单元。
这个问题通常不是 Deployment Share 配置错误,而是 MDT 8456 仍尝试访问新版 ADK 中已经缺失或不完整的 x86 WinPE 路径。Windows 11 ADK 已逐步取消 x86 WinPE 支持,MDT 的旧管理单元因此可能崩溃。
处理方法
关闭 Deployment Workbench。
用管理员 PowerShell 创建 MDT 期望存在的空目录:
powershellNew-Item -ItemType Directory -Force ` -Path "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs"重新打开 Deployment Workbench,进入 Deployment Share → Properties → Windows PE。
只保留 x64 平台,禁用或取消 x86 支持。
确认下面的 x64 目录存在:
textC:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs执行 Update Deployment Share,选择 Completely regenerate the boot images。
创建 x86 空目录只是为了绕过 MDT 管理单元的旧路径检查,并不代表要生成 x86 启动映像。Windows 11 部署建议使用 x64 WinPE。
如果仍然崩溃,确认 Windows ADK 与 Windows PE Add-on 版本完全一致;还可以优先改用 ADK 25398。微软社区记录过相同的 MDT/新版 ADK MMC 崩溃问题:MDT and ADK setup for Windows 11 cause error in MMC。
9.2 WinPE 生成失败或启动异常
若你坚持用路线 B(24H2 基线 PE),Update Deployment Share 可能报: MakeWinPEMedia / The ADK WinPE 路径找不到 或生成后 PE 无法启动。
规避手段(按推荐顺序):
优先路线 A:改用 ADK 25398(§4 路线 A),部署的 OS 仍是 24H2,无功能损失。
应用 MDT 24H2 补丁:用官方/社区发布的 MDT 8456 24H2 支持补丁包,覆盖:
C:\Program Files\Microsoft Deployment Toolkit\Templates\LiteTouchPE.xml...\Templates\LiteTouchPE.xml与Binary\x64\PSProvider相关脚本 覆盖后完全重建启动映像(§6.9)。
兜底(手动 PE):若仍失败,用 ADK 手动生成:
powershell# 管理员 PowerShell & "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\copype.cmd" amd64 D:\WinPE # 把 MDT 的脚本/Unattend 注入后 MakeWinPEMedia,再把生成的 wim 作为 WDS 启动映像此法维护成本高,仅作救急。
10. 客户端 PXE 启动与验证
- 客户端开机 → 进入启动菜单(如 F12)→ 选 IPv4 PXE Boot。
- 应看到 WDS 加载
MDT LiteTouch Win11 (x64)。 - 进入 LiteTouch 向导:
- 本教程的
SkipTaskSequence=NO会保留任务序列选择页面,部署时手动选择任务序列;如需自动选择,参见 6.8.1.1。 - 本教程的
SkipLocaleSelection=YES已固定中文(中国)、默认微软拼音和北京时间,因此不会显示 Locale and Time 页面。 - 本教程的
SkipAdminPassword=YES会跳过 Administrator Password 页面;本地 Administrator 密码已在创建任务序列时设置,不从CustomSettings.ini读取。 - 本教程的
SkipApplications=NO会保留应用程序选择页面;需要自动安装指定应用时,参见 6.8.1.1。 - 按任务序列执行 UEFI/GPT 分区、驱动注入和操作系统安装。
- 本教程的
SkipDomainMembership=NO会保留 Domain Membership 页面;继续前请核对域名和加域账号。 - 使用
JoinDomain和DomainAdmin配置完成加域;由于未指定MachineObjectOU,计算机账户默认进入域的Computers容器。 FinishAction=REBOOT会在任务序列完成后自动重启客户端。
- 本教程的
- 完成后重启,登录域,验证:
- 计算机名 = 序列号(或你定义的规则)
- 已加入
huohuo.com,计算机对象位于域的Computers容器 - 设备管理器无黄色感叹号(驱动匹配正确)
11. 运维与排错
| 现象 | 排查 |
|---|---|
| 客户端 PXE 卡在 " contacting server " | 检查 DHCP 作用域地址池、WDS 服务、代理 DHCP 设置、防火墙 UDP 69/4011 |
LiteTouch 启动后提示连不上 \\MDT01\DeploymentShare$ | 查 Bootstrap.ini 的服务器名、UserID/密码、共享权限和网络连通性 |
| 加域失败 | 查实际加域账号的权限、域名、账户是否锁定/过期和默认计算机容器设置 |
| 驱动不匹配(设备带感叹号) | 核对 Model 字符串、已选择的驱动方案、目录/Profile 名称 |
| 24H2 PE 生成失败 | 见 §9,回退路线 A |
| 部署慢 | 部署共享移到独立高速盘;多机并发开 WDS 多播(Multicast) |
进阶:
- 多播:WDS → 服务器属性 → Multicast,对一次性大规模并发有效。
- MDT Database:把机型→驱动/应用/设置做成 SQL 数据库,适合机型很多的环境。
- LTI/ZTI:当前是 LTI(Lite Touch);配合 SCCM 才是 ZTI。
12. 上线前检查清单
- [ ] Windows Server 2025 已完成计算机重命名(默认
MDT01),时间/DNS 正常 - [ ] ADK + WinPE add-on 版本一致(25398 或 26100+补丁)
- [ ] MDT 8456 安装完成
- [ ] WDS 角色安装,RemoteInstall 目录就位
- [ ] DeploymentShare 在独立盘,共享
DeploymentShare$ - [ ] Win11 OS 映像已导入
- [ ] 已选择一种驱动方案,并完成对应配置:DriverGroup 或 Selection Profile,不能同时启用
- [ ] CustomSettings.ini / Bootstrap.ini 已配(加域、跳过向导)
- [ ] (可选)如使用自定义 OU,已配置
MachineObjectOU并委派实际加域账号权限 - [ ] Update Deployment Share 完全重建成功,生成 LiteTouchPE_x64.wim
- [ ] WDS 已添加 LiteTouchPE 启动映像
- [ ] DHCP 已授权、作用域已启用,WDS DHCP 选项卡的两个同机配置已勾选
- [ ]
WDSServer启动类型为 Automatic,当前状态为 Running - [ ] 一台样机 PXE 实测通过,驱动/加域验证 OK
- [ ] 大规模并发前评估多播
附:常用 PowerShell 速查
powershell
# 安装 DHCP 与 WDS 角色(本教程为同机部署)
Install-WindowsFeature -Name WDS,DHCP -IncludeManagementTools -Restart
# 重启 WDS 服务
Restart-Service WDSServer
# 设置 WDS 为自动启动并立即启动
Set-Service -Name WDSServer -StartupType Automatic
Start-Service -Name WDSServer
# 完全重建 MDT 启动映像(等效于控制台 Update)
# 在 Deployment Workbench 右键 Update Deployment Share 即可
# 查看 ADK 版本
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots"
# 查客户端机型字符串(建驱动目录前必查)
Get-CimInstance Win32_ComputerSystem | Select-Object Manufacturer,Model文档版本:v1.0 | 适用 MDT 8456 + ADK 25398/26100 + Windows Server 2025 + Win11
留言