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组,通过测试。
设置是很灵活的。
为避免任务冲突,请根据实际情况调整任务所在的任务组。
还是没有解决。
贴两图解决问题
两块硬盘容量一样
如果只有两块硬盘容量且一致。
这个就不好测试了。
但是我记得选择小磁盘时是按磁盘容量排序,然后取一个,应该没什么问题把。
无论多少硬盘,脚本都是选择最小一块硬盘。