前言
我在前面有写过 《Powershell实现多硬盘的电脑使用MDT or SCCM安装系统选择目的盘清单》 的文章(最早在2年前我的个人博客发出来),因为我这几年生产环境一直用的是
SCCM
,
MDT
当时只是简单自己测试通过,并没有做详细记录。但这段时间一直有网友一直和反馈这个方法在
MDT
平台没法正常工作,今天抽空把环境复现并做记录,供大家参考。
需求背景
现在公司新购的ThinkPad或Dell笔记本和台式机部分机型预装为2块物理磁盘。默认情况下使用
MDT
在线部署操作系统时,只能通过任务序列中选择指定的硬盘和分区进行部署系统。但有些机器
Disk1
为固态磁盘,有些
Disk0
为固态磁盘,不太方便选择系统安装的目的磁盘。而且有些时候 HelpDesk 会有一些奇葩的需求,要求系统安装在他指定的磁盘上,没有任何规则可言。
最终目标
实现针对不同机型,自动部署系统至正确的磁盘或弹框让Helpdesk人员部署系统时手动选择安装系统的目的磁盘。

操作步骤
以下内容、脚本在MDT2012 ~ MDT8456版本均测试通过,如有问题,可截图与我联系。
1.判断 OSD
目标机器是否存在多块物理硬盘
OSD
将以下
PowerShell
命令保存为
CheckDisk.ps1
,该脚本用途是获取目标机器的物理硬盘信息。这里做个简单排除,将USB的硬盘排除在外。并且如果结果
大于 1
说明有多块磁盘,这时候再创建一个变量
$MoreThanOneHD
并将其值设为
$TRUE
.
If ((Get-Disk | Where-Object -FilterScript {$_.Bustype -ne 'USB'}).Count -gt 1) {$TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment;$TSEnv.Value(‘MoreThanOneHD’)= $true}
2.创建 MDT 任务序列
- 打开部署任务,在格式化硬盘前面
,我是放在新建任务组
里面,如下图所示:Preinstall
MDT部署Windows系列 (十): 进阶篇—针对多硬盘计算机制作系统目的磁盘选择菜单 - 访问:
并创建MDTDeploymentShare\Scripts\
目录(个人习惯,该目录用来存放后续使用的自定义脚本。也可以不创建,直接放在Custom\ChooseDisk
目录底下)Scripts
MDT部署Windows系列 (十): 进阶篇—针对多硬盘计算机制作系统目的磁盘选择菜单 - 创建任务一
,任务类型为检查计算机是否存在多个硬盘
Run Powershell Script
MDT部署Windows系列 (十): 进阶篇—针对多硬盘计算机制作系统目的磁盘选择菜单 - 将前面创建的
脚本存放在CheckDisk.ps1
,并在任务一MDTDeploymentShare\Scripts\Custom\ChooseDisk
里执行(如下图所示),执行脚本如下:Choose Disk
%ScriptRoot%\Custom\ChooseDisk\CheckDisk.ps1
MDT部署Windows系列 (十): 进阶篇—针对多硬盘计算机制作系统目的磁盘选择菜单 - 创建任务二
,任务类型为选择安装系统的目的磁盘
Run Command Line
执行命令如下:MDT部署Windows系列 (十): 进阶篇—针对多硬盘计算机制作系统目的磁盘选择菜单 %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -STA -NoProfile -ExecutionPolicy Bypass -File "%SCRIPTROOT%\Custom\ChooseDisk\ChooseDiskWPF.ps1"
- 我将
,CheckDisk.ps1
以及其他所需文件及目录ChooseDiskWPF.ps1
打包,可以下载并解压缩存放在ChooseDisk
文件夹直接使用。Scripts\Custom
点我下载访问密码Blog.itpro.cc
- 设置任务二
选择安装系统的目的磁盘
的执行前提条件。简单的解释一下其目的: 当物理磁盘只有一个时则不需要执行这一步;如果有多块物理磁盘,则需执行该模块弹出 GUI 界面让用户选择安装系统的目的磁盘。
这里会用到
这个脚本执行返回的变量CheckDisk.ps1
值,即:当$MoreThanOneHD
时,符合执行任务二的前提条件。MoreThanOneHD=TRUE
MDT部署Windows系列 (十): 进阶篇—针对多硬盘计算机制作系统目的磁盘选择菜单 MDT部署Windows系列 (十): 进阶篇—针对多硬盘计算机制作系统目的磁盘选择菜单
3.配置 PE 启动镜像组件
默认情况下 MDT PE 里是没有添加 Powershell 等相关模块的,这样会导致上述的脚本无法正常运行
选择以下组件
- PowerShell
- .NET Framework
- Storage Management Cmdlets
- Enhanced Storage