我需要重新制作几个使用 diskpart 在 Powershell 中进行分区的批处理脚本。其中一个脚本“隐藏”了 Windows 恢复分区,如下所示:
select disk 0
select partition 4
set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
gpt attributes=0x8000000000000001
remove
我找到了 Powershell 命令行,除了第 4 行。此行设置属性,同时将分区标记为必需,并阻止自动分配驱动器号。但我在 Powershell 中找不到这样做的方法 - 似乎没有与“gpt 属性=”等效的命令。
有人知道如何在 Powershell 中实现这一点吗?
编辑:
我想我找到了部分解决方案。作为参考,我的 Powershell 代码如下所示:
在早期的脚本中,创建了恢复分区:
param(
[int]$DiskNr = 0
)
Clear-Disk -number $DiskNr -RemoveData -RemoveOEM -Confirm:$false
Initialize-Disk -Number $DiskNr -PartitionStyle GPT
New-Partition -DiskNumber $DiskNr -Size 850MB -DriveLetter R -GptType "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}"
Format-Volume -DriveLetter R -FileSystem NTFS -Force -NewFileSystemLabel "Recovery"
这里我们已经通过设置 GPT 类型将其标记为恢复分区来处理原始 diskpart 脚本中的第 3 行。
稍后我想隐藏它(这是原始 diskpart 脚本所做的),因此我使用:
Set-Partition -DriveLetter R -NoDefaultDriveLetter $True
Get-Partition -DriveLetter R | Remove-PartitionAccessPath -accesspath "R:"
第一行在这里部分执行原始 diskpart 脚本中的“gpt attribute="-command”所执行的操作;它阻止系统自动为分区分配驱动器号。但是,我还没有找到该命令另一半的解决方案:将分区标记为 Windows 安装所必需的。我实际上并不完全确定我是否需要这样做,所以也许我已经完成了。
答案1
在创建脚本以创建 Windows 恢复分区时(调整磁盘大小后),我遇到了同样的问题。 我也不知道任何本机 PowerShell 命令语法来设置属性,但我能够完成我想要的:
$recoverySizeMiB = 720
$drive = Get-Partition -DriveLetter C
$partitionSupportedSize = Get-PartitionSupportedSize -DiskNumber $drive.DiskNumber -PartitionNumber $drive.PartitionNumber
$newSize = $partitionSupportedSize.SizeMax - ($recoverySizeMiB * 1MB)
Resize-Partition -DiskNumber $drive.DiskNumber -PartitionNumber $drive.PartitionNumber -Size $newSize
$recoveryPartition = New-Partition -DiskNumber $drive.DiskNumber -UseMaximumSize -GptType "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}"
Format-Volume -Partition $recoveryPartition -FileSystem NTFS -NewFileSystemLabel "Recovery" -Force
$null = @"
select disk $($drive.DiskNumber)
select partition $($partitionRecovery.PartitionNumber)
gpt attributes=0x8000000000000001
assign letter=R
exit
"@ | diskpart.exe
这是可行的,因为我们有前面步骤中的磁盘和分区号。我们可以将输入导入到 diskpart 中,然后就可以开始了。
干杯!