Microsoft – Windows Server 2022 Systempartition erweitern

Bei Standardinstallationen von Windows Server 2022 befindet sich hinter der Systempartition mit dem Windowsverzeichnis noch eine Recovery-Partition. Diese Recovery-Partition verhindert bei einer Vergrößerung der Disk, was bei virtuellen Systemen nicht ungewöhnlich ist, die Vergrößerung des Dateisystems.

Dafür ein kostenpflichtiges Tool zu kaufen, schien mir unnötig. Hier ein PowerShell-Script, dass die Recovery-Partition löscht, die Systempartition vergrößert und die Recovery-Partition dahinter wieder neu anlegt.

###########################################
## Resize System Partition and Re-Create ##
## Recovery Partition                    ##
###########################################

Param (
	$RecoveryPartitionSize = 600,
	$RecoveryDriveLetter = "R"
)

## Disable Recovery Environment
reagentc /disable

If (!(Test-Path -Path "c:\windows\system32\Recovery\WinRe.wim")) {
	If (!(Test-Path -Path "c:\install\Recovery\WindowsRE\WinRe.wim")) {
	Write-Host -ForegroundColor red "WinRe.wim not found in C:\Windows\System32\Recovery or C:\INSTALL\Recovery\WindowsRE!"
	break
	}  else { $RecoveryPath =  "c:\install\Recovery\WindowsRE\WinRe.wim" }
} else { $RecoveryPath = "c:\windows\system32\Recovery\WinRe.wim" }

## Find Recovery Partition and delete it
Write-Host -ForegroundColor yellow "Deleting Recovery Partition ..."
$RecoveryPartition = Get-Partition | Where-Object { $_.Type -eq "Recovery" }
Remove-Partition -DiskNumber $RecoveryPartition.DiskNumber -PartitionNumber $RecoveryPartition.PartitionNumber -Confirm:$false

## Find System Partition and get possible Sizes
Write-Host -ForegroundColor yellow "Checking possible Sizes of System Partition ..."
$SystemPartion = Get-Partition -DriveLetter c
$SystemPartitionSizes = Get-PartitionSupportedSize -DiskNumber $SystemPartion.DiskNumber -PartitionNumber $SystemPartion.PartitionNumber

## Calculate maximum possible Size minus Size for the new Recovery Partition
$NewSize = $SystemPartitionSizes.SizeMax - $RecoveryPartitionSize * 1024 * 1024

## Resize System Partition
Write-Host -ForegroundColor green "Resizing System Partition ..."
Resize-Partition -DiskNumber $SystemPartion.DiskNumber -PartitionNumber $SystemPartion.PartitionNumber -Size $NewSize

## Rebuild Recovery Partition

Write-Host -ForegroundColor green "Rebuilding Recovery Partition ..."
$drives = Get-PSDrive -PSProvider filesystem
if ($drives.Name -Contains $RecoveryDriveLetter) {
	$FindLetter = [int][char]"D"
	While ($drives.Name -Contains [char]$FindLetter) {
		$FindLetter ++
	}
	$RecoveryDriveLetter = [char]$FindLetter
}

New-Partition -DiskNumber $SystemPartion.DiskNumber -UseMaximumSize -GptType "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}" -DriveLetter $RecoveryDriveLetter
$RecoveryPartition = Get-Partition | Where-Object { $_.Type -eq "Recovery" }
Format-Volume -FileSystem NTFS -Partition $RecoveryPartition
New-Item -Type Directory -Path "$($RecoveryDriveLetter):\Recovery\WindowsRE\"
Copy-Item -Path $RecoveryPath -Destination "$($RecoveryDriveLetter):\Recovery\WindowsRE\"
reagentc /setreimage /path "$($RecoveryDriveLetter):\Recovery\WindowsRE\"
reagentc /enable


Write-Host -ForegroundColor green "Cleaning up."

Das Script erwartet ein „WinRE.wim“ in „C:\Windows\System32\Recovery“ oder „C:\INSTALL\Recovery\WindowsRE“.

Sollte das Script statt der Recovery- die Systempartition löschen, trägt der Ausführende selbst die Verantwortung dafür – klar, oder?

Author: Peter