Sono in procinto di scrivere uno script PowerShell per il backup di un computer Windows utilizzando rsync. A tal fine, sto tentando di utilizzare WMI da detto script per creare una copia Shadow non persistente con la partecipazione degli scrittori (come è apparentemente consigliato per i backup).Creazione di una copia shadow utilizzando il contesto "Backup" in un PowerShell
Ho trovato da un'altra domanda (Accessing Volume Shadow Copy (VSS) Snapshots from powershell) un modo per creare una copia shadow in generale, ma l'esempio qui riportato utilizza "ClientAccessible" come parametro di contesto, che determina la creazione di una copia shadow persistente, senza scrittore partecipazione.
Durante la ricerca di una soluzione, ho trovato che ho potuto utilizzare il seguente comando per ottenere un elenco di contesti, che presumo sono capiti da WMI:
Get-WmiObject win32_shadowcontext | Out-GridView
Essa lista hanno un contesto denominato " Backup ", che è convenientemente quello che voglio. Ho provveduto a tentare la creazione di una copia shadow non persistente utilizzando quel contesto:
$shadow = (Get-WmiObject -list win32_shadowcopy).Create("C:\", "Backup")
Tuttavia, questo sembra fallire e il contenuto del $ ombra variabile è impostato su
ReturnValue : 5
ShadowID : {00000000-0000-0000-0000-000000000000}
Secondo la relativa documentazione (Create method of the Win32_ShadowCopy class), il valore restituito significa "Contesto copia shadow non supportato".
Non sono riuscito a trovare alcuna documentazione pertinente sul motivo per cui questo contesto non è supportato o se è possibile utilizzarlo del tutto. Ho anche provato i contesti "FileShareBackup" e "AppRollback" senza successo.
Presumo che manchi o qualcosa di ovvio, o che per qualche motivo, WMI non supporta nient'altro che "clientAccessible" durante la creazione di copie shadow, o che questo dipende dal sistema operativo (sto testando questo su Windows 7 , 64-bit)
Come posso farlo funzionare?
Ho appena scritto la stessa cosa (ma era con C# e la libreria AlphaVSS), ecco cosa ho imparato: sarà necessario montare l'istantanea per ottenere i file da sincronizzare, ma per essere montabile uno snapshot deve avere il flag 'NoAutoRelease' impostato su' true'. Inoltre per avere 'NoAutoRelease' impostato su true devi avere' Persistent' impostato su 'true', quindi solo un file fyi in modo da non passare troppo tempo a cercare di ottenere qualcosa di diverso da' ClientAccessable' per funzionare ('ClientAccessable' ha entrambe le variabili sono impostate su 'true') –
Le copie shadow create con NoAutoRelease impostate su False vengono rimosse automaticamente una volta che il processo che le richiede termina ([collegamento] (http://msdn.microsoft.com/en-us/library/windows/desktop /aa394427(v=vs.85).aspx)). Inizialmente sospettavo che quello fosse il problema che stavo vedendo, ma il fatto che abbia lo stesso problema con il contesto di AppRollback suggerisce che potrebbe non essere il caso. Ma in generale è possibile montare copie shadow a rilascio automatico come descritto in [link] (http://www.goodjobsucking.com/?p=62). Tuttavia, preferirei usare powershell piuttosto che la soluzione proposta lì. –
Se non riesci a far funzionare WMI, prova a caricare l'assembly [AlphaVSS] (http://alphavss.codeplex.com/) in Powershell. [Ecco come creare un'istantanea, montarla ed eliminarla in C#] (http://pastebin.com/XhVLyq0m), dovresti essere in grado di tradurla in powershell. –