环境

Windows Server 2012 Standard x64
DC
林功能级别:Windows Server 2008 R2
域功能级别:Windows Server 2008 R2

Windows Server 2019 x64
Microsoft Deployment Toolkit 6.3.8456.1000
Windows 评估和部署工具包 Windows ADK 10.1.19041.1

测试机型
组装机 1 HDD
组装机 1 SSD + 1 HDD
戴尔 商用机 1 MS SSD + 1 HDD
戴尔 工作站 1 M2 SSD + 2 HDD

目的

实现 MDT 网络安装时,自动格式化所有硬盘,若有 SSD 固态硬盘,则自动部署/安装系统到 SSD 硬盘中,若有 M2,则优先安装到 M2。
以下步骤均以 x64 为例。

更新 2023-03-03

修复了下文章。

步骤

配置 Deployment Share

上传脚本 UserExit.vbs 到项目中的 Scripts 目录中。
以下以 M2 脚本为示例(同样支持无 M2 硬盘),M2 脚本仅支持 Windows 10 PE 以上。
之前文章脚本,请查看 Github: https://github.com/Shankschn/MDT-Scripts
上传 clear_disk_gpt.ps1 至“deployroot\scripts\”下。
编辑项目 Rule,在相关设置中配置如下内容,其他配置均省略。

[Settings]
Priority=CustomUE,Defatult

[CustomUE]
UserExit=UserExit.vbs
OSDDiskIndex=#SetOSDisk()#

[Default]
...

编辑 Winidows PE,选择 Platform x64。
点击 Feaatures,勾选 Storage Management Cmdlets(重要),Microsoft Data Access Components (MDAC/ADO) support,.NET Framework,Windows PowerShell(重要)。 由于原本就勾了一些,至于其他是不是必须的...懒得测试了...。

UserExit.vbs

Function UserExit(sType, sWhen, sDetail, bSkip)
    oLogging.CreateEntry "entered UserExit ", LogTypeInfo
    UserExit = Success
End Function

Function SetOSDisk()
    Set ObjShell = CreateObject("WScript.Shell")
    deployroot = oEnvironment.Item("deployroot")
    cmd1 = "powershell.exe -noprofile -executionpolicy bypass -file " & deployroot & "\scripts\clear_disk_gpt.ps1"
    oLogging.CreateEntry "UserExit: Command to run " & cmd1, LogTypeInfo
    ObjShell.run cmd1,0,true

    set wmi = GetObject("Winmgmts:\\.\Root\Microsoft\Windows\Storage")
    set disks = wmi.Execquery("Select * from MSFT_PhysicalDisk")
    for each d in disks
        if d.MediaType=4 then
            diskid=d.DeviceId
            if d.BusType=17 then
                exit for
            end if
        end if
    next
    if diskid = "" then
        diskid=0
    end if
    SetOSDisk = diskid

End Function

clear_disk_gpt.ps1

Get-Disk |ForEach {
    Clear-Disk -Number $_.Number -RemoveData -RemoveOEM -Confirm:$false
}
Get-Disk |Where-Object PartitionStyle -eq 'RAW' |Initialize-Disk -PassThru |New-Partition -AssignDriveLetter -UseMaximumSize |Format-Volume -FileSystem NTFS -Confirm:$false

配置 Task Sequences 中的 Task Sequence

提示

以下操作均配置在 Preinstall -> New Computer only 中,此方案不可与其他方案混用。

开始

添加 General 中的 Set Task Sequence Variable:
Name:Custom DiskDone=NO
Task seqquence Variable:DiskDone
Value:NO

配置 Group:OS to Disk

此处以配置 Group:OS to Disk 3 为例,由于太多重复,就不细说了。
Group:OS to Disk 2, Group:OS to Disk 1,请参考 Group:OS to Disk 3 自行配置。
1.添加 Group:OS to Disk 3。
2.配置 Group Options:

  • 添加执行条件 if all conditions are true
  • 添加执行条件 task Sequence Variable Condition:DiskDone not equals Yes
  • 添加执行条件 task Sequence Variable Condition:OSDiskIndex equals 3

3.Group 内,配置 Format and Partition Disk,配置时 disk 序号请选择 3:

  • Format and Partition Disk 3 (BIOS)
  • Format and Partition Disk 3 (UEFI)

4.Group 内,添加 General 中的 Set Task Sequence Variable:

  • Name:Custom DiskDone=YES
  • Task seqquence Variable:DiskDone
  • Value:YES

配置 Group:OS to Disk 0

1.添加 Group:OS to Disk 0。
2.配置 Group Options:

  • 添加执行条件 task Sequence Variable Condition:DiskDone not equals Yes

3.Group 内,配置 Format and Partition Disk 配置时 disk 序号请选择 0:

  • Format and Partition Disk 0 (BIOS)
  • Format and Partition Disk 0 (UEFI)

4.Group 内,添加 General 中的 Set Task Sequence Variable:

  • Name:Custom DiskDone=YES
  • Task seqquence Variable:DiskDone
  • Value:YES

Update Deployment Share

配置完所有步骤后,应用,并确认,Update Deployment Share,一直下一步即可。

配置 MDS

在 MDS Windows 部署服务管理器 -> 启动映像中:
1.禁用原启动镜像(默认名:MDT Production x64)
2.添加新启动镜像:Deployment Share 工程目录目录下的 boot 文件中,应该会有一个现在时间点生成的 MDT Production x64.wmi 文件,添加它即可。
最后,重启启动 WDS 服务即可。

相关报错

格式化并分区硬盘步骤成功,但是 MDT 设置的系统启动分区盘符与 MDT 部署时实际系统分区盘符不符,出现此错误。

could not find ccm install folder. don't use ccmerrors.dll

格式化并分区硬盘步骤失败/被跳过,出现错误,检查日志,排查为什么失败。

x:\windows\temp\deployment scripts\wizard.hta

参考

www.cnblogs.com/dreamer-fish/p/13175537.html
www.deploymentresearch.com/creating-custom-variables-in-mdt-2013/
social.technet.microsoft.com/Forums/en-US/56723290-c78c-4083-af92-bd6294f425ab/using-custom-properties-in-task-sequence-conditional-statement?forum=mdt
social.technet.microsoft.com/Forums/en-US/f32c9757-d49c-4bd8-b496-8904ff04d12b/priority-properties-and-userexit-script?forum=mdt
docs.microsoft.com/en-us/previous-versions/windows/desktop/stormgmt/msft-physicaldisk
www.deploymentresearch.com/mdt-2013-lite-touch-driver-management/
docs.microsoft.com/en-us/mem/configmgr/osd/understand/using-task-sequence-variables
docs.microsoft.com/zh-cn/windows/deployment/deploy-windows-mdt/configure-mdt-for-userexit-scripts
docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-tasks--disks-and-file-systems
social.technet.microsoft.com/Forums/en-US/e57b2c8d-a0d8-4e5b-b42a-287415f07c93/mdt-2010-with-multiple-drives?forum=mdt
docs.microsoft.com/en-us/mem/configmgr/mdt/samples-guide#deploying-the-correct-device-drivers-to-computers-with-the-same-hardware-devices-but-different-make-and-model
social.technet.microsoft.com/Forums/en-US/bd72de95-2ce3-41fa-ac4a-1ca9693f2d00/multiple-userexit-scripts-built-into-default?forum=mdt
social.technet.microsoft.com/Forums/en-US/f497a85a-2423-4fb1-9252-1d602ed3ad9f/how-to-set-up-multiple-hard-disks?forum=mdt
superuser.com/questions/1073817/how-to-detect-identify-m-2-ssd
docs.microsoft.com/en-us/previous-versions/windows/desktop/stormgmt/msft-disk?redirectedfrom=MSDN

最后修改:2024 年 09 月 29 日 06 : 58 PM
如果觉得文章帮助了您,您可以随意赞赏。