mirror of
https://github.com/rbalsleyMSFT/FFU.git
synced 2026-06-14 02:09:35 -06:00
Merge pull request #25 from zehadialam/feature-reduce-ffu-size
Reducing FFU Size
This commit is contained in:
@@ -15,5 +15,22 @@ del c:\windows\panther\unattend\unattend.xml /F /Q
|
||||
del c:\windows\panther\unattend.xml /F /Q
|
||||
taskkill /IM sysprep.exe
|
||||
timeout /t 10
|
||||
REM Run disk cleanup (cleanmgr.exe) with all options enabled: https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/automating-disk-cleanup-tool
|
||||
set rootkey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches
|
||||
REM Per above doc, the Offline Pages Files subkey does not have stateflags value
|
||||
for /f "tokens=*" %%K in ('reg query "%rootkey%"') do (
|
||||
echo %%K | findstr /i /c:"Offline Pages Files"
|
||||
if errorlevel 1 (
|
||||
reg add "%%K" /v StateFlags0000 /t REG_DWORD /d 2 /f
|
||||
)
|
||||
)
|
||||
cleanmgr.exe /sagerun:0
|
||||
REM Remove the StateFlags0000 registry value
|
||||
for /f "tokens=*" %%K in ('reg query "%rootkey%"') do (
|
||||
echo %%K | findstr /i /c:"Offline Pages Files"
|
||||
if errorlevel 1 (
|
||||
reg delete "%%K" /v StateFlags0000 /f
|
||||
)
|
||||
)
|
||||
REM Sysprep/Generalize
|
||||
c:\windows\system32\sysprep\sysprep.exe /quiet /generalize /oobe
|
||||
|
||||
@@ -1438,6 +1438,31 @@ function New-PEMedia {
|
||||
Remove-Item -Path "$WinPEFFUPath" -Recurse -Force
|
||||
WriteLog 'Cleanup complete'
|
||||
}
|
||||
|
||||
function Optimize-FFUCaptureDrive {
|
||||
param (
|
||||
[string]$VhdxPath
|
||||
)
|
||||
try {
|
||||
WriteLog 'Mounting VHDX for volume optimization'
|
||||
Mount-VHD -Path $VhdxPath
|
||||
WriteLog 'Defragmenting Windows partition...'
|
||||
Optimize-Volume -DriveLetter W -Defrag -NormalPriority -Verbose
|
||||
WriteLog 'Performing slab consolidation on Windows partition...'
|
||||
Optimize-Volume -DriveLetter W -SlabConsolidate -NormalPriority -Verbose
|
||||
WriteLog 'Dismounting VHDX'
|
||||
Dismount-ScratchVhdx -VhdxPath $VhdxPath
|
||||
WriteLog 'Mounting VHDX as read-only for optimization'
|
||||
Mount-VHD -Path $VhdxPath -NoDriveLetter -ReadOnly
|
||||
WriteLog 'Optimizing VHDX in full mode...'
|
||||
Optimize-VHD -Path $VhdxPath -Mode Full
|
||||
WriteLog 'Dismounting VHDX'
|
||||
Dismount-ScratchVhdx -VhdxPath $VhdxPath
|
||||
} catch {
|
||||
throw $_
|
||||
}
|
||||
}
|
||||
|
||||
function New-FFU {
|
||||
param (
|
||||
[Parameter(Mandatory = $false)]
|
||||
@@ -2367,6 +2392,7 @@ try {
|
||||
WriteLog 'Waiting for VM to shutdown'
|
||||
} while ($FFUVM.State -ne 'Off')
|
||||
WriteLog 'VM Shutdown'
|
||||
Optimize-FFUCaptureDrive -VhdxPath $VHDXPath
|
||||
#Capture FFU file
|
||||
New-FFU $FFUVM.Name
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user