Автоматизировать процесс очистки диска cleanmgr.exe без вмешательства пользователя
Я разрабатываю файл сценария powershell, который должен выполнить некоторую очистку диска без вмешательства пользователя. Пользователь не сможет ничего настроить.
когда я запускаю cleanmgr.exe /d c: sageset:1
появится всплывающее окно для выбора файлов / папок для очистки(параметры очистки).
это создаст запись реестра, содержащую настройки с параметрами очистки, и после этого вы можете запустить cleanmgr.exe /sagerun:1
который фактически выполнит очистку.
есть ли способ укажите параметры очистки непосредственно с помощью powerhell / командной строки (без необходимости вручную выбирать удаляемые объекты)?
4 ответов
следующий сценарий Powershell автоматизирует CleanMgr.исполняемый. В этом случае он удаляет временные файлы и запускает расширение Update Cleanup для очистки замененных файлов резервных копий пакета обновления (Windows 10 теперь делает это автоматически через запланированную задачу). Для автоматизации других расширений создайте свойство "StateFlags0001" в соответствующем разделе реестра, как это сделано в строках New-ItemProperty. Вы найдете имена разделов реестра в ветке "VolumeCaches".
Как тихий, этот скрипт пытается запустить CleanMgr.exe в скрытом окне. Однако в какой-то момент CleanMgr порождает новые процессы, которые видны и должны обслуживаться отдельно.
Write-Host 'Clearing CleanMgr.exe automation settings.'
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\*' -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:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Update Cleanup' -Name StateFlags0001 -Value 2 -PropertyType DWord
Write-Host 'Enabling Temporary Files Cleanup.'
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary 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:SystemRoot\Logs\CBS\DeepClean.log) {
$UpdateCleanupSuccessful = Select-String -Path $env:SystemRoot\Logs\CBS\DeepClean.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....'
}
Я столкнулся с такой же проблемой. Исследуя возможные пути, я обнаружил следующее: : http://stealthpuppy.com/cleaning-up-and-reducing-the-size-of-your-master-image/
Он показывает, как создать параметры реестра sageset с помощью cmd. Затем вы можете использовать sagerun:# cmd. Я еще не пробовал его через скрипт, но подтвердил, что он работает...
единственное решение, которое я нашел, - вручную установить значения реестра следующим образом:
...
#Set StateFlags0012 setting for each item in Windows 8.1 disk cleanup utility
if (-not (get-itemproperty -path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Active Setup Temp Folders' -name StateFlags0012 -ErrorAction SilentlyContinue)) {
set-itemproperty -path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Active Setup Temp Folders' -name StateFlags0012 -type DWORD -Value 2
set-itemproperty -path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\BranchCache' -name StateFlags0012 -type DWORD -Value 2
set-itemproperty -path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Downloaded Program Files' -name StateFlags0012 -type DWORD -Value 2
...