Solución:
El siguiente script de Powershell automatiza CleanMgr.exe. En este caso, elimina los archivos temporales y ejecuta la extensión Update Cleanup para purgar los archivos de copia de seguridad del Service Pack reemplazados (Windows 10 ahora lo hace automáticamente a través de una tarea programada). Para automatizar otras extensiones, cree una propiedad “StateFlags0001” en la clave de registro correspondiente, como se hace en las líneas New-ItemProperty. Encontrará los nombres de las claves del Registro en la rama “VolumeCaches”.
En cuanto a ser silencioso, este script intenta iniciar CleanMgr.exe en una ventana oculta. Sin embargo, en algún momento, CleanMgr genera nuevos procesos que son visibles y deben esperarse por separado.
Write-Host 'Clearing CleanMgr.exe automation settings.'
Get-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionExplorerVolumeCaches*' -Name StateFlags0001 -ErrorAction SilentlyContinue | Remove-ItemProperty -Name StateFlags0001 -ErrorAction SilentlyContinue
Write-Host 'Enabling Update Cleanup. This is done automatically in Windows 10 via a scheduled task.'
New-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionExplorerVolumeCachesUpdate Cleanup' -Name StateFlags0001 -Value 2 -PropertyType DWord
Write-Host 'Enabling Temporary Files Cleanup.'
New-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionExplorerVolumeCachesTemporary Files' -Name StateFlags0001 -Value 2 -PropertyType DWord
Write-Host 'Starting CleanMgr.exe...'
Start-Process -FilePath CleanMgr.exe -ArgumentList '/sagerun:1' -WindowStyle Hidden -Wait
Write-Host 'Waiting for CleanMgr and DismHost processes. Second wait neccesary as CleanMgr.exe spins off separate processes.'
Get-Process -Name cleanmgr,dismhost -ErrorAction SilentlyContinue | Wait-Process
$UpdateCleanupSuccessful = $false
if (Test-Path $env:SystemRootLogsCBSDeepClean.log) {
$UpdateCleanupSuccessful = Select-String -Path $env:SystemRootLogsCBSDeepClean.log -Pattern 'Total size of superseded packages:' -Quiet
}
if ($UpdateCleanupSuccessful) {
Write-Host 'Rebooting to complete CleanMgr.exe Update Cleanup....'
SHUTDOWN.EXE /r /f /t 0 /c 'Rebooting to complete CleanMgr.exe Update Cleanup....'
}
Puedes usar cleanmgr /verylowdisk
para automatizar silenciosamente todos los pasos de limpieza.
La única solución que encontré es configurar manualmente los valores de registro de esta manera:
…
#Set StateFlags0012 setting for each item in Windows 8.1 disk cleanup utility
if (-not (get-itemproperty -path 'HKLM:SoftwareMicrosoftWindowsCurrentVersionExplorerVolumeCachesActive Setup Temp Folders' -name StateFlags0012 -ErrorAction SilentlyContinue)) {
set-itemproperty -path 'HKLM:SoftwareMicrosoftWindowsCurrentVersionExplorerVolumeCachesActive Setup Temp Folders' -name StateFlags0012 -type DWORD -Value 2
set-itemproperty -path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionExplorerVolumeCachesBranchCache' -name StateFlags0012 -type DWORD -Value 2
set-itemproperty -path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionExplorerVolumeCachesDownloaded Program Files' -name StateFlags0012 -type DWORD -Value 2
…
ver ejemplo completo