Il sistema operativo Microsoft, in determinate circostanze, come gli aggiornamenti di Windows, o su richiesta durante l’installazione di alcuni programmi, crea un punto di ripristino della configurazione che permette di tornare indietro, alla configurazione precedente, e superare eventuali problemi che si sono creati dopo l’operazione che avevamo eseguito. Esiste una sua interfaccia da cui gestire, creare o disattivare i punti di ripristino, ma in questo articolo vedremo come farlo con PowerShell e Vssadmin.
Per i vari comandi, che vedrete nel resto dell’articolo, prendo sempre ad esempio il mio computer, le lettere unità disco o i numeri dei punti di ripristino vanno ovviamente modificati e adattati a quelli che rilevate nel vostro computer.
Attivare/disattivare il ripristino
Per attivare il ripristino della configurazione in un disco fisso, va sempre inserita anche la lettera C: del disco di sistema, si utilizza il seguente comando: Enable-ComputerRestore -Drive “c:","d:","e:"
Se invece si vuole disattivarla in un disco in particolare si utilizza: Disable-ComputerRestore -Drive "e:"
Invece il comando vssadmin resize shadowstorage /for=d: /on=d: /maxsize=10%
stabilisce la percentuale del disco fisso assegnata ai file del ripristino di configurazione.
Punti di ripristino presenti
Il comando Get-ComputerRestorePoint
mostra i punti di ripristino attualmente presenti.
Creare punto di ripristino
Per creare manualmente un singolo punto di ripristino va utilizzato il seguente comando: Checkpoint-Computer -Description "xxx" -RestorePointType "xxx"
, vanno inserite una descrizione (-Description) e il tipo di punto di ripristino (-RestorePointType), dove è possibile usare solo queste voci:
APPLICATION_INSTALL
APPLICATION_UNINSTALL
DEVICE_DRIVER_INSTALL
MODIFY_SETTINGS
CANCELLED_OPERATION
Se non inseriamo questa seconda opzione, di default viene salvata come APPLICATION_INSTALL.
Da PowerShell è possibile creare un solo punto di ripristino al giorno, ovvero ogni 1140 minuti, se volessimo modificare questo valore bisogna creare una nuova chiave DWORD (32 bit), chiamata SystemRestorePointCreationFrequency
e dargli un valore numerico anche di un minuto volendo, la chiave va creata in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore
.
Data e ora
Se volessimo sapere in che data e ora è stato creato un punto di ripristino possiamo utilizzare questo script: Get-ComputerRestorePoint | Format-Table -AutoSize Description, SequenceNumber, @{n="Date";e={[System.Management.ManagementDateTimeConverter]::ToDateTime($_.creationtime)}
}
Utilizzare un punto di ripristino
Per poter ripristinare un singolo punto, a nostra scelta, abbiamo a disposizione il comando: Restore-Computer -RestorePoint xx
, al posto delle xx va messo il SequenceNumber che vediamo nel cmdlet Get-ComputerRestorePoint.
L’utilizzo di questo comando provocherà un riavvio del computer e l’applicazione del punto di ripristino scelto.
Cancellare i punti di ripristino
PowerShell non ha un cmdlet per la cancellazione dei punti di ripristino, lo possiamo fare tramite il comando vssadmin.
Con vssadmin Delete Shadows /For=C:
cancelliamo i punti di ripristino presenti nel disco C:, mentre vssadmin delete shadows /all
cancella i punti di ripristino da qualsiasi disco fisso del computer.
Invece vssadmin delete shadows /for=c: /oldest
cancella il punto di ripristino più vecchio, se si aggiunge l’opzione /quiet
non serve dare la conferma al comando.
Con il commando vssadmin list shadows /for=c:
vediamo la lista dettagliata di tutti I punti di ripristino presenti nel disco C:, se vogliamo cancellarne uno dobbiamo recuperare il suo ID copia shadow.
Per cancellare un punto di ripristino a nostra scelta va usato il comando: vssadmin delete shadows /Shadow={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
dove al posto delle varie X va inserito il valore rilevato nell’ID copia shadow preso dal comando precedente.
Il comando diventerà qualcosa di simile a questo: vssadmin delete shadows /Shadow={a4df9af8-c4be-40dd-abfb-7f8920d2dc20}
Una avvertenza, nel computer dove ho fatto le prove questo comando non sono riuscito a farlo funzionare, e non ho ben capito perché, da PowerShell, mentre ha funzionato dal prompt dei comandi aperto come amministratore.