2013-01-08 9 views
15

Próbuję utworzyć migawkę Volume Shadow Copy przy użyciu powłoki Power Shell systemu Windows 7. Zauważyłem, że mogę tworzyć migawki przy użyciu następujących elementów za pośrednictwem poprzedniej wersji: superuser question:Uzyskiwanie dostępu do Volume Shadow Copy (VSS) Migawki z powłoki Power Shell

(Get-WmiObject -list win32_shadowcopy).create("C:\","ClientAccessible") 

jestem w stanie znaleźć wszelką dokumentację wskazującą, że jest możliwe, aby ustawić kopię cień do „Exposed”, tak, że może być odwzorowany na literę dysku z użyciem WMI. An article połączony w tym samym pytaniu pokazuje hak za pomocą skrzyżowania, aby uzyskać dostęp do migawki.

Kiedy próbuję uzyskać dostęp do dowiązania, mam następujące:

PS C:\Windows\system32> ls C:\shadowcopy 
Get-ChildItem : The parameter is incorrect. 

At line:1 char:3 
+ ls <<<< C:\shadowcopy 
    + CategoryInfo   : ReadError: (C:\shadowcopy:String) [Get-ChildItem], IOException 
    + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand 

próbuje uzyskać dostęp do zrzutu bezpośrednio daje następujące:

PS C:\Windows\system32> ls '\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy14' 
Get-ChildItem : Paths that begin with \\?\GlobalRoot are internal to the kernel and should not be opened by managed applications. 
At line:1 char:3 
+ ls <<<< '\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy14' 
    + CategoryInfo   : NotSpecified: (:) [Get-ChildItem], ArgumentException 
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.GetChildItemCommand 

Jak mogę uzyskać dostęp do migawkę VSS od A skrypt powershell?

Odpowiedz

23

W jaki sposób utworzyłeś dowiązanie symboliczne? Jak wspomniano w tym artykule, trzeba podać ścieżkę urządzenia z backslashem spływu:

$s1 = (Get-WmiObject -List Win32_ShadowCopy).Create("C:\", "ClientAccessible") 
$s2 = Get-WmiObject Win32_ShadowCopy | Where-Object { $_.ID -eq $s1.ShadowID } 

$d = $s2.DeviceObject + "\" # <-- this here 

cmd /c mklink /d C:\shadowcopy "$d" 

Po tym, byłem w stanie uzyskać dostęp do kopii w tle zamontowany C:\shadowcopy dobrze.

Aby odmontować kopiowanie w tle zadzwoń pod numer $s2.Delete(), jak @KeyszerS wskazał w komentarzach.

+3

Końcowe "\" było najważniejszą częścią, którą przegapiłem. – jordanm

+5

Dla przyszłych czytelników, oto jak usunąć kopię w tle: '" vssadmin delete shadows/Shadow = "" $ ($ s2.ID.ToLower()) ""/Quiet "| iex' then 'Remove-Item c: \ shadowcopy -Confirm: $ false -Force'. Umieść ten kod po pracy z kopią w tle. –

+0

Działa jak magia. –

Powiązane problemy