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"

放在选择磁盘后面即可。

重新分区目标盘

该部分自动化解决5616错误废弃,临时文件冲突,无法自动化处理,双硬盘的情况还要重写脚本,其实这个错误,还是我做实验,经常半截停止任务造成的。

万一遇到5616错误,手动删除一下分区吧。

为避免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,就双分区。

 

 

 后记

重新分区安装系统目标磁盘

似乎有朋友遇到了不能初始化分区系统目标硬盘的问题。

稍微看了看,似乎应该将remove_osd_patition放进new_computer里面。

new_computer,全新安装任务,Offline User State Capture,离线用户状态捕获,Refresh only,仅刷新。

这三个任务组是同级的。

那么捕获用户状态,刷新计算机这两种情况不应该分区目标盘。似乎也不应该分区其他盘。

那么应该可以将磁盘分区,检查硬盘等任务,放入new_computer组里面。

格式化系统安装目标盘,任务放入New Computer组,通过测试。

 设置是很灵活的。

 

为避免任务冲突,请根据实际情况调整任务所在的任务组。

还是没有解决。

 贴两图解决问题

 

 

两块硬盘容量一样

如果只有两块硬盘容量且一致。

这个就不好测试了。

但是我记得选择小磁盘时是按磁盘容量排序,然后取一个,应该没什么问题把。

无论多少硬盘,脚本都是选择最小一块硬盘。

 

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