在微软 MDT(Microsoft Deployment Toolkit)环境中,要识别多硬盘并进行条件化部署(例如选择 SSD 中最小的盘来安装系统,同时格式化其他硬盘),需要结合脚本和 MDT 的配置来实现。这通常通过 PowerShell 脚本完成。
实现步骤
- 编写脚本识别硬盘并选择目标盘
以下是一个 PowerShell 脚本的示例,用于识别系统中的硬盘,选择 SSD 中最小的硬盘作为目标安装盘,并格式化其他硬盘:
# 获取所有硬盘信息
$disks = Get-WmiObject -Query "SELECT * FROM Win32_DiskDrive"
# 过滤出 SSD 硬盘
$ssdDisks = $disks | Where-Object { $_.MediaType -eq "Fixed hard disk media" -and $_.Model -match "SSD" }
# 确保存在 SSD
if ($ssdDisks -eq $null) {
Write-Host "No SSD detected, using default installation logic."
exit 1
}
# 找到最小容量的 SSD
$targetDisk = $ssdDisks | Sort-Object Size | Select-Object -First 1
# 获取目标盘编号
$targetDiskNumber = $targetDisk.DeviceID -replace "[^\d]"
# 选择非目标盘
$otherDisks = $disks | Where-Object { $_.DeviceID -ne $targetDisk.DeviceID }
# 输出目标盘信息
Write-Host "Target Disk for Installation: $($targetDisk.DeviceID), Size: $($targetDisk.Size / 1GB) GB"
# 格式化其他硬盘
foreach ($disk in $otherDisks) {
$diskNumber = $disk.DeviceID -replace "[^\d]"
Write-Host "Formatting Disk: $($disk.DeviceID)"
Invoke-Expression "diskpart /s <#
select disk $diskNumber
clean
create partition primary
format fs=ntfs quick
assign
exit
#>"
}
# 配置目标盘为 MDT 的安装目标
Write-Host "Setting Target Disk $targetDiskNumber for MDT Deployment"
Set-Variable -Name OSDDisk -Value $targetDiskNumber
- 在 MDT 中使用脚本
将上述脚本保存为 SelectDisk.ps1
,并配置 MDT 使用它。
- 将脚本添加到 MDT:
- 将
SelectDisk.ps1
脚本复制到 MDT 的脚本目录(通常是 \\<MDT_SHARE>\Scripts
)。
- 修改任务序列: 在任务序列中,添加一个新的任务步骤来运行 PowerShell 脚本:
- 类型:
Run PowerShell Script
- 脚本名称:
SelectDisk.ps1
- 参数:
-ExecutionPolicy Bypass -File \\<MDT_SHARE>\Scripts\SelectDisk.ps1
- 使用变量:
$disks = Get-WmiObject -Query "SELECT * FROM Win32_DiskDrive"
过滤出 SSD 硬盘
$ssdDisks = $disks | Where-Object { $.MediaType -eq "Fixed hard disk media" -and $.Model -match "SSD" }
确保存在 SSD
if ($ssdDisks -eq $null) {
Write-Host "No SSD detected, using default installation logic."
exit 1
}
找到最小容量的 SSD
$targetDisk = $ssdDisks | Sort-Object Size | Select-Object -First 1
获取目标盘编号
$targetDiskNumber = $targetDisk.DeviceID -replace "[^\d]"
选择非目标盘
$otherDisks = $disks | Where-Object { $_.DeviceID -ne $targetDisk.DeviceID }
输出目标盘信息
Write-Host "Target Disk for Installation: $($targetDisk.DeviceID), Size: $($targetDisk.Size / 1GB) GB"
格式化其他硬盘
foreach ($disk in $otherDisks) {
$diskNumber = $disk.DeviceID -replace "[^\d]"
Write-Host "Formatting Disk: $($disk.DeviceID)"
Invoke-Expression "diskpart /s <#
select disk $diskNumber
clean
create partition primary
format fs=ntfs quick
assign
exit
#>"
}
配置目标盘为 MDT 的安装目标
Write-Host "Setting Target Disk $targetDiskNumber for MDT Deployment"
Set-Variable -Name OSDDisk -Value $targetDiskNumber
```
2. 在 MDT 中使用脚本
将上述脚本保存为 `SelectDisk.ps1`,并配置 MDT 使用它。
**将脚本添加到 MDT**:
- 将 `SelectDisk.ps1` 脚本复制到 MDT 的脚本目录(通常是 `\\<MDT_SHARE>\Scripts`)。
**修改任务序列**: 在任务序列中,添加一个新的任务步骤来运行 PowerShell 脚本:
- 类型:`Run PowerShell Script`
- 脚本名称:`SelectDisk.ps1`
- 参数:`-ExecutionPolicy Bypass -File \\<MDT_SHARE>\Scripts\SelectDisk.ps1`
**使用变量**:
- 脚本最后会设置 `$OSDDisk` 变量,MDT 使用此变量作为目标磁盘号。
- 确保任务序列中的分区和格式化步骤依赖 `$OSDDisk` 变量,而不是默认的磁盘 0。
3. 调整分区和格式化
在 MDT 的任务序列中,配置分区步骤:
- 使用 `Use Toolkit Package` 步骤初始化 MDT 环境。
- 确保分区步骤中的目标磁盘设置为 `%OSDDisk%`。
**格式化其他硬盘**:
- 添加自定义脚本步骤运行 `diskpart`,确保清理和格式化其他硬盘。在微软 MDT(Microsoft Deployment Toolkit)环境中,要识别多硬盘并进行条件化部署(例如选择 SSD 中最小的盘来安装系统,同时格式化其他硬盘),需要结合脚本和 MDT 的配置来实现。这通常通过 PowerShell 脚本完成。
**实现步骤**
**1. 编写脚本识别硬盘并选择目标盘**
以下是一个 PowerShell 脚本的示例,用于识别系统中的硬盘,选择 SSD 中最小的硬盘作为目标安装盘,并格式化其他硬盘:
```powershell
powershell
复制代码
# 获取所有硬盘信息
$disks = Get-WmiObject -Query "SELECT * FROM Win32_DiskDrive"
过滤出 SSD 硬盘
$ssdDisks = $disks | Where-Object { $.MediaType -eq "Fixed hard disk media" -and $.Model -match "SSD" }
确保存在 SSD
if ($ssdDisks -eq $null) {
Write-Host "No SSD detected, using default installation logic."
exit 1
}
找到最小容量的 SSD
$targetDisk = $ssdDisks | Sort-Object Size | Select-Object -First 1
获取目标盘编号
$targetDiskNumber = $targetDisk.DeviceID -replace "[^\d]"
选择非目标盘
$otherDisks = $disks | Where-Object { $_.DeviceID -ne $targetDisk.DeviceID }
输出目标盘信息
Write-Host "Target Disk for Installation: $($targetDisk.DeviceID), Size: $($targetDisk.Size / 1GB) GB"
格式化其他硬盘
foreach ($disk in $otherDisks) {
$diskNumber = $disk.DeviceID -replace "[^\d]"
Write-Host "Formatting Disk: $($disk.DeviceID)"
Invoke-Expression "diskpart /s <#
select disk $diskNumber
clean
create partition primary
format fs=ntfs quick
assign
exit
#>"
}
配置目标盘为 MDT 的安装目标
Write-Host "Setting Target Disk $targetDiskNumber for MDT Deployment"
Set-Variable -Name OSDDisk -Value $targetDiskNumber
```
**2. 在 MDT 中使用脚本**
将上述脚本保存为 `SelectDisk.ps1`,并配置 MDT 使用它。
1. **将脚本添加到 MDT**:
- 将 `SelectDisk.ps1` 脚本复制到 MDT 的脚本目录(通常是 `\\<MDT_SHARE>\Scripts`)。
1. **修改任务序列**: 在任务序列中,添加一个新的任务步骤来运行 PowerShell 脚本:
- 类型:`Run PowerShell Script`
- 脚本名称:`SelectDisk.ps1`
- 参数:`-ExecutionPolicy Bypass -File \\<MDT_SHARE>\Scripts\SelectDisk.ps1`
1. **使用变量**:
- 脚本最后会设置 `$OSDDisk` 变量,MDT 使用此变量作为目标磁盘号。
- 确保任务序列中的分区和格式化步骤依赖 `$OSDDisk` 变量,而不是默认的磁盘 [0](/api/attachments/853cf0c5-e4af-457f-bd36-3b9d6b9d5d32?platform=QnA)。
**3. 调整分区和格式化**
在 MDT 的任务序列中,配置分区步骤:
- 使用 `Use Toolkit Package` 步骤初始化 MDT 环境。
- 确保分区步骤中的目标磁盘设置为 `%OSDDisk%`。
**格式化其他硬盘**:
- 添加自定义脚本步骤运行 `diskpart`,确保清理和格式化其他硬盘。