From 79364e334d6d09ff150e70dab7bfb2637d0ad8a8 Mon Sep 17 00:00:00 2001 From: rbalsleyMSFT <53497092+rbalsleyMSFT@users.noreply.github.com> Date: Mon, 15 Apr 2024 10:53:41 -0700 Subject: [PATCH] Reverted recovery partition code back --- FFUDevelopment/BuildFFUVM.ps1 | 27 +++++---- .../WinPEDeployFFUFiles/ApplyFFU.ps1 | 60 +++++++++---------- 2 files changed, 44 insertions(+), 43 deletions(-) diff --git a/FFUDevelopment/BuildFFUVM.ps1 b/FFUDevelopment/BuildFFUVM.ps1 index 8092451..a2998b5 100644 --- a/FFUDevelopment/BuildFFUVM.ps1 +++ b/FFUDevelopment/BuildFFUVM.ps1 @@ -14,7 +14,7 @@ This script creates a Windows 10/11 FFU and USB drive to help quickly get a Wind Path to the Windows 10/11 ISO file. .PARAMETER WindowsSKU -Edition of Windows 10/11 to be installed, e.g., 'Home', 'Home_N', 'Home_SL', 'EDU', 'EDU_N', 'Pro', 'Pro_N', 'Pro_EDU', 'Pro_Edu_N', 'Pro_WKS', 'Pro_WKS_N' +Edition of Windows 10/11 to be installed, e.g., accepted values are: 'Home', 'Home N', 'Home Single Language', 'Education', 'Education N', 'Pro', 'Pro N', 'Pro Education', 'Pro Education N', 'Pro for Workstations', 'Pro N for Workstations', 'Enterprise', 'Enterprise N' .PARAMETER FFUDevelopmentPath Path to the FFU development folder (default is C:\FFUDevelopment). @@ -283,7 +283,7 @@ param( [bool]$CleanupDeployISO = $true, [bool]$CleanupAppsISO = $true ) -$version = '2403.1' +$version = '2404.1' #Check if Hyper-V feature is installed (requires only checks the module) $osInfo = Get-WmiObject -Class Win32_OperatingSystem @@ -1088,7 +1088,6 @@ function New-ScratchVhdx { WriteLog "Creating new Scratch VHDX..." $newVHDX = New-VHD -Path $VhdxPath -SizeBytes $disksize -LogicalSectorSizeBytes $LogicalSectorSizeBytes -Dynamic:($Dynamic.IsPresent) - # $newVHDX = New-VHD -Path $VhdxPath -SizeBytes $disksize -LogicalSectorSizeBytes $LogicalSectorSizeBytes -Fixed $toReturn = $newVHDX | Mount-VHD -Passthru | Initialize-Disk -PassThru -PartitionStyle GPT #Remove auto-created partition so we can create the correct partition layout @@ -1193,10 +1192,12 @@ function New-RecoveryPartition { $winReWim = Get-ChildItem "$($OsPartition.DriveLetter):\Windows\System32\Recovery\Winre.wim" if (($null -ne $winReWim) -and ($winReWim.Count -eq 1)) { - # Wim size + 52MB is minimum WinRE partition size. + # Wim size + 100MB is minimum WinRE partition size. # NTFS and other partitioning size differences account for about 17MB of space that's unavailable. - # Adding 32MB as a buffer to ensure there's enough space. - $calculatedRecoverySize = $winReWim.Length + 52MB + 32MB + # Adding 32MB as a buffer to ensure there's enough space to account for NTFS file system overhead. + # Adding 250MB as per recommendations from + # https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions?view=windows-11#recovery-tools-partition + $calculatedRecoverySize = $winReWim.Length + 250MB + 32MB WriteLog "Calculated space needed for recovery in bytes: $calculatedRecoverySize" @@ -1486,10 +1487,9 @@ function New-FFU { WriteLog "FFU file name: $FFUFileName" $FFUFile = "$FFUCaptureLocation\$FFUFileName" #Capture the FFU - #Invoke-Process cmd "/c ""$DandIEnv"" && dism /Capture-FFU /ImageFile:$FFUFile /CaptureDrive:\\.\PhysicalDrive$($vhdxDisk.DiskNumber) /Name:$($winverinfo.Name)$($winverinfo.DisplayVersion)$($winverinfo.SKU) /Compress:Default" - Invoke-Process cmd "/c dism /Capture-FFU /ImageFile:$FFUFile /CaptureDrive:\\.\PhysicalDrive$($vhdxDisk.DiskNumber) /Name:$($winverinfo.Name)$($winverinfo.DisplayVersion)$($winverinfo.SKU) /Compress:Default" + Invoke-Process cmd "/c ""$DandIEnv"" && dism /Capture-FFU /ImageFile:$FFUFile /CaptureDrive:\\.\PhysicalDrive$($vhdxDisk.DiskNumber) /Name:$($winverinfo.Name)$($winverinfo.DisplayVersion)$($winverinfo.SKU) /Compress:Default" + # Invoke-Process cmd "/c dism /Capture-FFU /ImageFile:$FFUFile /CaptureDrive:\\.\PhysicalDrive$($vhdxDisk.DiskNumber) /Name:$($winverinfo.Name)$($winverinfo.DisplayVersion)$($winverinfo.SKU) /Compress:Default" WriteLog 'FFU Capture complete' - #WriteLog 'Sleeping 60 seconds before dismount of VHDX' Dismount-ScratchVhdx -VhdxPath $VHDXPath } @@ -1524,8 +1524,9 @@ function New-FFU { #Optimize FFU if ($Optimize -eq $true) { WriteLog 'Optimizing FFU - This will take a few minutes, please be patient' - #Invoke-Process cmd "/c ""$DandIEnv"" && dism /optimize-ffu /imagefile:$FFUFile" - Invoke-Process cmd "/c dism /optimize-ffu /imagefile:$FFUFile" + #Need to use ADK version of DISM to address bug in DISM - perhaps Windows 11 24H2 will fix this + Invoke-Process cmd "/c ""$DandIEnv"" && dism /optimize-ffu /imagefile:$FFUFile" + #Invoke-Process cmd "/c dism /optimize-ffu /imagefile:$FFUFile" WriteLog 'Optimizing FFU complete' } @@ -1994,7 +1995,7 @@ LogVariableValues #Get Windows ADK try { $adkPath = Get-ADK - #Need to use the Deployment and Imaging tools environment to use dism from the Insider ADK to optimize the FFU. This is only needed until Windows 23H2 + #Need to use the Deployment and Imaging tools environment to use dism from the Sept 2023 ADK to optimize FFU $DandIEnv = "$adkPath`Assessment and Deployment Kit\Deployment Tools\DandISetEnv.bat" } catch { @@ -2172,7 +2173,6 @@ try { $index = Get-Index -WindowsImagePath $wimPath -WindowsSKU $WindowsSKU } - # $vhdxDisk = New-ScratchVhdx -VhdxPath $VHDXPath -SizeBytes $disksize -Dynamic:$false -LogicalSectorSizeBytes $LogicalSectorSizeBytes $vhdxDisk = New-ScratchVhdx -VhdxPath $VHDXPath -SizeBytes $disksize -LogicalSectorSizeBytes $LogicalSectorSizeBytes $systemPartitionDriveLetter = New-SystemPartition -VhdxDisk $vhdxDisk @@ -2184,6 +2184,7 @@ try { $WindowsPartition = $osPartitionDriveLetter + ":\" #$recoveryPartition = New-RecoveryPartition -VhdxDisk $vhdxDisk -OsPartition $osPartition[1] -RecoveryPartitionSize $RecoveryPartitionSize -DataPartition $dataPartition + $recoveryPartition = New-RecoveryPartition -VhdxDisk $vhdxDisk -OsPartition $osPartition[1] -RecoveryPartitionSize $RecoveryPartitionSize -DataPartition $dataPartition WriteLog "All necessary partitions created." diff --git a/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 b/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 index f1b475b..e242711 100644 --- a/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 +++ b/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 @@ -117,7 +117,7 @@ $LogFileName = 'ScriptLog.txt' $USBDrive = Get-USBDrive New-item -Path $USBDrive -Name $LogFileName -ItemType "file" -Force | Out-Null $LogFile = $USBDrive + $LogFilename -$version = '2403.1' +$version = '2404.1' WriteLog 'Begin Logging' WriteLog "Script version: $version" @@ -130,26 +130,26 @@ $DiskID = $PhysicalDeviceID.substring($PhysicalDeviceID.length - 1,1) WriteLog "DiskID is $DiskID" #COMMENT THIS WHOLE BLOCK OUT ONCE FFUPROVIDER FIX IS IN -#Modify diskpart answer files if DiskID not 0 -# $UEFIFFUPartitions = 'x:\CreateUEFI-FFU-Partitions.txt' -$ExtendPartition = 'x:\ExtendPartition-UEFI.txt' +# #Modify diskpart answer files if DiskID not 0 +# # $UEFIFFUPartitions = 'x:\CreateUEFI-FFU-Partitions.txt' +# $ExtendPartition = 'x:\ExtendPartition-UEFI.txt' -If ($DiskID -ne '0'){ - WriteLog 'DiskID is not 0. Need to modify diskpart answer files' - # try { - # Set-DiskpartAnswerFiles $UEFIFFUPartitions $DiskID - # } - # catch { - # WriteLog "Modifying $UEFIFFUPartitions failed with error: $_" - # } +# If ($DiskID -ne '0'){ +# WriteLog 'DiskID is not 0. Need to modify diskpart answer files' +# # try { +# # Set-DiskpartAnswerFiles $UEFIFFUPartitions $DiskID +# # } +# # catch { +# # WriteLog "Modifying $UEFIFFUPartitions failed with error: $_" +# # } - try { - Set-DiskpartAnswerFiles $ExtendPartition $DiskID - } - catch { - WriteLog "Modifying $ExtendPartition failed with error: $_" - } -} +# try { +# Set-DiskpartAnswerFiles $ExtendPartition $DiskID +# } +# catch { +# WriteLog "Modifying $ExtendPartition failed with error: $_" +# } +# } #Find FFU Files [array]$FFUFiles = @(Get-ChildItem -Path $USBDrive*.ffu) @@ -476,19 +476,19 @@ else{ # } #COMMENT THIS WHOLE BLOCK OUT AFTER FFUPROVIDER FIX IS IN -# Extend Windows partition and create recovery partition -Writelog 'Extending Windows partition' -Invoke-Process diskpart.exe "/S $ExtendPartition" -if($LASTEXITCODE -eq 0){ - WriteLog 'Successfully extended Windows partition and created recovery partition' -} -else{ - Writelog "Failed to extend Windows partition and/or create recovery partition - LastExitCode = $LASTEXITCODE" -} +# # Extend Windows partition and create recovery partition +# Writelog 'Extending Windows partition' +# Invoke-Process diskpart.exe "/S $ExtendPartition" +# if($LASTEXITCODE -eq 0){ +# WriteLog 'Successfully extended Windows partition and created recovery partition' +# } +# else{ +# Writelog "Failed to extend Windows partition and/or create recovery partition - LastExitCode = $LASTEXITCODE" +# } #UNCOMMENT THIS AFTER FFUPROVIDER FIX IS IN -#Set W: drive letter to Windows partition -#Get-Disk | Where-Object Number -eq $DiskID | Get-Partition | Where-Object PartitionNumber -eq 3 | Set-Partition -NewDriveLetter W +# Set W: drive letter to Windows partition +Get-Disk | Where-Object Number -eq $DiskID | Get-Partition | Where-Object PartitionNumber -eq 3 | Set-Partition -NewDriveLetter W #Copy modified WinRE if folder exists, else copy inbox WinRE $WinRE = $USBDrive + "WinRE\winre.wim"