2015-03-04 10 views
7

Sto sviluppando un file di script PowerShell che eseguirà la pulizia del disco senza l'intervento dell'utente. L'utente non deve essere in grado di configurare nulla.Automatizza il processo di Pulitura disco cleanmgr.exe senza l'intervento dell'utente

Quando si esegue cleanmgr.exe /d c: sageset:1, viene visualizzata una finestra popup per selezionare i file/le cartelle da pulire (opzioni di pulizia).

Ciò creerà una voce di registro contenente le impostazioni con le opzioni di pulizia e, successivamente, è possibile eseguire cleanmgr.exe /sagerun:1 che eseguirà effettivamente la pulizia.

C'è un modo per specificare le opzioni di pulizia direttamente con powerhell/riga di comando (senza la necessità di selezionare manualmente le cose da eliminare)?

+0

BTW, questo processo è stato automatizzato, su Windows 10, tramite un'attività pianificata incorporata. –

+0

@NathanHartley: Potrebbe essere, ma ho bisogno di farlo esplicitamente dalla mia app di Windows su richiesta, quindi l'attività programmata integrata non è sufficiente. –

risposta

1

L'unica soluzione che ho trovato è quello di impostare manualmente i valori di registro in questo modo:

...

#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 

...

see full example

5

Il seguente script PowerShell automatizza Cleanmgr.exe. In questo caso, rimuove i file temporanei ed esegue l'estensione Pulitura aggiornamenti per eliminare i file di backup del Service Pack sostituiti (Windows 10 ora esegue automaticamente questa operazione tramite un'attività pianificata). Per automatizzare altre estensioni, crea una proprietà "StateFlags0001" nella corrispondente chiave di registro, come fatto nelle righe New-ItemProperty. Troverai i nomi delle chiavi del Registro di sistema nel ramo "VolumeCaches".

Per quanto riguarda il silenzio, questo script tenta di avviare CleanMgr.exe in una finestra nascosta. Tuttavia, ad un certo punto CleanMgr genera nuovi processi che sono visibili e devono essere attesi separatamente.

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....' 
} 
+2

per i novizi di ps come me che si sono seduti lì andando ... funziona ??? assicurati di aggiungere $ VerbosePreference = "Continua" se vuoi vedere cosa sta facendo. – JDPeckham

+1

Quel codice era copia-n-incollato da una funzione avanzata, che utilizzava un parametro -Verbose. Trasformerò Write-Verbose in Write-Host, nonostante Don Jones abbia affermato che ogni utilizzo di Write-Host ucciderà un cucciolo. –

Problemi correlati