从powershell访问卷影复制(VSS)快照

jor*_*anm 17 windows powershell volume-shadow-service

我正在尝试使用Windows 7中的Windows Power Shell创建和访问卷影复制快照.我发现我可以通过以前的超级用户问题使用以下内容创建快照:

(Get-WmiObject -list win32_shadowcopy).create("C:\","ClientAccessible")
Run Code Online (Sandbox Code Playgroud)

我无法找到任何文档,表明可以将卷影副本设置为"Exposed",以便可以使用它映射到驱动器号WMI.在同一问题中链接的文章显示使用联结来访问快照的黑客攻击.

当我尝试访问符号链接时,我得到以下内容:

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
Run Code Online (Sandbox Code Playgroud)

尝试直接访问快照提供以下内容:

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
Run Code Online (Sandbox Code Playgroud)

如何从powershell脚本访问VSS快照?

Ans*_*ers 26

你是如何创建符号链接的?如该文章所述,您必须使用尾部反斜杠指定设备路径:

$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"
Run Code Online (Sandbox Code Playgroud)

在此之后,我能够访问安装的阴影副本C:\shadowcopy.

要卸载卷影副本调用$s2.Delete(),正如@KeyszerS在注释中指出的那样.

  • 对于未来的读者,这里是如何删除阴影副本:`"vssadmin删除阴影/阴影=""$($ s2.ID.ToLower())""/安静"| iex`然后`Remove-Item c:\ shadowcopy -Confirm:$ false -Force`.使用卷影副本后,请将此代码放入. (5认同)
  • 删除卷影副本可以使用`$ s2.Delete()`通过WMI本机完成,而不是执行vssadmin (5认同)
  • 尾随的"\"是我错过的关键部分. (3认同)