From 8100df3d24b0776335120c95e0182322cfa98ae3 Mon Sep 17 00:00:00 2001 From: Zehadi Alam <63765084+zehadialam@users.noreply.github.com> Date: Tue, 16 Jul 2024 23:43:35 -0400 Subject: [PATCH 1/2] Add diskpart commands to assign GPT attributes to recovery partition --- FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 b/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 index ec131e6..e3e3a5f 100644 --- a/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 +++ b/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 @@ -444,6 +444,16 @@ WriteLog "Applying FFU to $PhysicalDeviceID" WriteLog "Running command dism /apply-ffu /ImageFile:$FFUFileToInstall /ApplyDrive:$PhysicalDeviceID" #In order for Applying Image progress bar to show up, need to call dism directly. Might be a better way to handle, but must have progress bar show up on screen. dism /apply-ffu /ImageFile:$FFUFileToInstall /ApplyDrive:$PhysicalDeviceID +$recoveryPartition = Get-Partition -Disk $Disk | Where-Object PartitionNumber -eq 4 +if ($recoveryPartition) { + $diskpartScript = @( + "SELECT DISK $($Disk.Number)", + "SELECT PARTITION $($recoveryPartition.PartitionNumber)", + "GPT ATTRIBUTES=0x8000000000000001", + "EXIT" + ) + $diskpartScript | diskpart.exe +} if($LASTEXITCODE -eq 0){ WriteLog 'Successfully applied FFU' } From 5616082275619bd63e3b3ddfdd7882a468c1b1c6 Mon Sep 17 00:00:00 2001 From: Zehadi Alam <63765084+zehadialam@users.noreply.github.com> Date: Wed, 17 Jul 2024 00:14:00 -0400 Subject: [PATCH 2/2] Add conditional check to not run clear-disk on new drives that are uninitialized --- FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 b/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 index e3e3a5f..b100eb2 100644 --- a/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 +++ b/FFUDevelopment/WinPEDeployFFUFiles/ApplyFFU.ps1 @@ -430,7 +430,9 @@ Writelog 'Clean Disk' #Invoke-Process diskpart.exe "/S $UEFIFFUPartitions" try { $Disk = Get-Disk -Number $DiskID - $Disk | clear-disk -RemoveData -RemoveOEM -Confirm:$false + if ($Disk.PartitionStyle -ne "RAW") { + $Disk | clear-disk -RemoveData -RemoveOEM -Confirm:$false + } } catch { WriteLog 'Cleaning disk failed. Exiting'