mirror of
https://github.com/rbalsleyMSFT/FFU.git
synced 2026-06-14 02:09:35 -06:00
Add Optimize-FFUCaptureDrive function and disk cleanup to InstallAppsandSysprep.cmd file
This commit is contained in:
@@ -18,5 +18,22 @@ timeout /t 10
|
|||||||
REM Run Component Cleanup since dism /online /cleanup-image /analyzecomponentcleanup recommends it
|
REM Run Component Cleanup since dism /online /cleanup-image /analyzecomponentcleanup recommends it
|
||||||
REM If adding latest CU, definitely need to do this to keep FFU size smaller
|
REM If adding latest CU, definitely need to do this to keep FFU size smaller
|
||||||
dism /online /cleanup-image /startcomponentcleanup /resetbase
|
dism /online /cleanup-image /startcomponentcleanup /resetbase
|
||||||
|
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
|
REM Sysprep/Generalize
|
||||||
c:\windows\system32\sysprep\sysprep.exe /quiet /generalize /oobe
|
c:\windows\system32\sysprep\sysprep.exe /quiet /generalize /oobe
|
||||||
|
|||||||
@@ -1438,6 +1438,31 @@ function New-PEMedia {
|
|||||||
Remove-Item -Path "$WinPEFFUPath" -Recurse -Force
|
Remove-Item -Path "$WinPEFFUPath" -Recurse -Force
|
||||||
WriteLog 'Cleanup complete'
|
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 {
|
function New-FFU {
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory = $false)]
|
[Parameter(Mandatory = $false)]
|
||||||
@@ -2364,6 +2389,7 @@ try {
|
|||||||
WriteLog 'Waiting for VM to shutdown'
|
WriteLog 'Waiting for VM to shutdown'
|
||||||
} while ($FFUVM.State -ne 'Off')
|
} while ($FFUVM.State -ne 'Off')
|
||||||
WriteLog 'VM Shutdown'
|
WriteLog 'VM Shutdown'
|
||||||
|
Optimize-FFUCaptureDrive -VhdxPath $VHDXPath
|
||||||
#Capture FFU file
|
#Capture FFU file
|
||||||
New-FFU $FFUVM.Name
|
New-FFU $FFUVM.Name
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user