Loading

WDS+MDT网络启动自动部署windows(十一)硬盘分区格式化全自动

简介:

虽然WDS+MDT在单硬盘很方便,但是各种大硬盘,小固态加大硬盘的地方,还是有若干不便之处。

如:第二块硬盘未分区格式化,需要手动选择安装磁盘,如果固态超过250G,是否需要分为两个区?

自动选择较小的硬盘

目前我这里的终端都是小固态,大机械,那么我们要尝试一下自动选择较小的硬盘作为系统安装盘。

通过磁盘大小排序,找到最小磁盘的序号,并将该序号赋值给安装盘号。

新建任务序列

还是command line,

#Choose_Smallest_Disk
$mindisk= (Get-Disk | Where-Object -FilterScript {$_.Bustype -ne 'USB'}) | Select-Object Number, Size | Sort-Object Size | Select-Object -First 1$TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment
$TSEnv.Value(“OSDDiskIndex”) = $mindisk.Number
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -STA -NoProfile -ExecutionPolicy Bypass -File "%SCRIPTROOT%\Custom\Choose_Smallest_Disk.ps1"

 升级镜像,替换镜像,测试

我将虚拟机硬盘换了换位置,0是大盘,3是小盘。

 测试正常,如果遇到 FAILURE ( 5616 ): 15250: Verify BCDBootEX,请删除磁盘所有分区。

mdt+wds的bug FAILURE ( 5616 ): 15250: Verify BCDBootEX - 上官飞鸿 - 博客园 (cnblogs.com)

格式化其他盘

为了生成纯净的系统,我也并不想装完系统再去分区格式化第二个盘。

脚本Format_Other_Disk.ps1

#Format_Other_Disk.ps1
$TSEnv
= New-Object -COMObject Microsoft.SMS.TSEnvironment $osddiskid = $tsenv.Value("OSDDiskIndex") $disks = (Get-Disk | Where-Object -FilterScript { $_.Bustype -ne 'USB' }) | % { $_.Number } foreach ($disk in $disks) { if ($disk -cne $osddiskid) { #初始化磁盘 Initialize-Disk -Number $disk -PartitionStyle GPT -Confirm:$false 2> $null #如果磁盘已经有分区,清理所有分区 Get-Disk -Number $disk | Get-Partition | Remove-Partition -Confirm:$false 2> $null #开始格式化,格式化为一个区 New-Partition -DiskNumber $disk -UseMaximumSize -AssignDriveLetter | Format-Volume -FileSystem NTFS -NewFileSystemLabel "数据磁盘" -Confirm:$false 2> $null } }
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -STA -NoProfile -ExecutionPolicy Bypass -File "%SCRIPTROOT%\Custom\Format_Other_Disk.ps1"

放在选择磁盘后面即可。

重新分区目标盘

为避免FAILURE ( 5616 ): 15250: Verify BCDBootEX错误。

我们删除系统盘所有分区吧。

在选择磁盘后执行这个脚本,初始化并清理目标盘所有分区。

脚本Format_OSD_Disk.ps1

#Format_OSD_Disk.ps1
$TSEnv
= New-Object -COMObject Microsoft.SMS.TSEnvironment $osddiskid = $tsenv.Value("OSDDiskIndex") #初始化磁盘 Initialize-Disk -Number $osddiskid -PartitionStyle GPT -Confirm:$false 2> $null #如果磁盘已经有分区,清理所有分区 Get-Disk -Number $osddiskid | Get-Partition | Remove-Partition -Confirm:$false 2> $null
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -STA -NoProfile -ExecutionPolicy Bypass -File "%SCRIPTROOT%\Custom\Format_OSD_Disk.ps1"

这样应该就可以了。

目标盘多分区

这个也是要考虑的,固态如果大于128G,那么256G,512G的系统盘,最好还是分为两个区吧。以后二次安装,或许可以不重新分区,只重装系统分区。

二次安装不重新分区,还没设计。但是不耽误现在设计自动分区方案。如果目标盘大于120G,那么就分2个区,第一个区100G,剩下给第二个区。

实验中,笔记中。又回滚了。

检查安装盘大小,并设置环境变量BigOSD

#CheckDiskSize.ps1
$TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment
$osddiskid = $tsenv.Value("OSDDiskIndex")

$base_size = 1024 * 1024 * 1024 * 150

$osd_size = Get-Disk -Number $osddiskid | %{$_.Size}

if ( $osd_size -gt $base_size ){
    $TSEnv.Value('BigOSD')= $true
}

复制原有的分区方案

将原来的分区方案复制一份

 改下名字,分别是1分区,2分区

更改2分区的分区方案

原始1分区方案

 修改的2分区方案

将Windows分区,改为固定大小,并新建一个剩余99%空间的Data分区

volue 右边 三个小图标 分别是新建,修改,删除。

UEFI的样子

 

 修改执行条件Option

 单分区方案添加条件  BigOSD not equals True

 双分区方案添加条件 BigOSD not equals True

 BIOS UEFI 都是一样设置。

 

组合使用

根据自己的情况组合使用吧,记得前面的MoreTheanOneHD么?

选择小盘,格式化其他盘,都可以加上那条脚本,并设置条件执行。

手动GUI选盘的,也可以加上重新分区目标盘,分区格式化其他盘

小结

我的自定义任务序列如下:

自定义任务组:Preinstall--Choose Disk

第一个任务:Check Disk,检查磁盘是否是多个,如果是多个,则设置变量 MoreThanOneHD  为 true

第二个任务:Choose Smallest Disk,如果有变量MoreThanOneHD 为 true,则执行并自动选择容量小的硬盘为系统安装目标盘。

第三个任务:Check_OSD_Size,直接检查系统安装目标盘,如果大于150G,那就设置变量 BigOSD 为 true

第四个任务:Remove_OSD_Partition,重新初始化并删除系统安装目标盘所有分区。

第五个任务:Format Other Disk,如果有变量MoreThanOneHD 为 true,则将所有非系统安装目标盘重新初始化并分为1个区格式化。

修改任务组:New Computer only

复制 原有的bios,uefi分区方案,改名以区分是单分区还是双分区。

编辑双分区方案,设置C盘固定大小,剩余的99%给D盘。

修改分区方案执行条件,增加BigOSD判断,BigOSD 不为 True,就单分区,为True,就双分区。

 

 

 

posted @ 2024-04-27 09:40  上官飞鸿  阅读(33)  评论(0编辑  收藏  举报