我正在编写用于使用rsync备份Windows计算机的PowerShell脚本。为此,我试图从所述脚本中使用WMI来创建一个非持久性的影子拷贝,并且有作者参与(显然建议用于备份)。在PowerShell中使用“Backup”上下文创建卷影副本
我从另一个问题(Accessing Volume Shadow Copy (VSS) Snapshots from powershell)的方式来创建一般卷影副本发现,但鉴于那里的例子使用“ClientAccessible”作为环境参数,这导致创建一个持久的卷影副本,没有作家参与。
在寻找解决的办法,我发现,我可以使用下面的命令来获取上下文的列表,我假设通过WMI理解:
Get-WmiObject win32_shadowcontext | Out-GridView
它列表已经上下文命名为“备份“,这是我想要的方便。我开始尝试创建一个非持久的卷影副本使用方面:
$shadow = (Get-WmiObject -list win32_shadowcopy).Create("C:\", "Backup")
然而,这似乎忽视和$影子变量的内容设置为
ReturnValue : 5
ShadowID : {00000000-0000-0000-0000-000000000000}
根据相关文档(Create method of the Win32_ShadowCopy class),返回值表示“不支持的影子副本上下文”。
我找不到任何相关的文档说明为什么这个上下文不受支持或者是否可以使用它。我也尝试过“FileShareBackup”和“AppRollback”上下文,但没有成功。
我假设我要么丢失了一些明显的东西,或者出于某种原因,WMI在创建卷影副本时确实不支持“clientAccessible”以外的其他任何内容,或者这取决于操作系统(我在Windows 7上测试此操作,64位)
我该如何得到这个工作?
我只是自己写了同样的东西(但是它与C#和库AlphaVSS一起),下面是我学到的东西:您将需要挂载快照以使文件同步它,但要挂载快照必须将'NoAutoRelease'标志设置为'true'。同样为了让'NoAutoRelease'设置为true,你必须将'Persistent'设置为'true',所以只需要一个fyi,所以你不用花费太多时间来尝试获取除ClientAccessable之外的其他东西('ClientAccessable')两个变量设置为“true”) –
将NoAutoRelease设置为False创建的卷影副本在请求它们的进程结束时自动删除([link](http://msdn.microsoft.com/zh-cn/library/windows/desktop /aa394427(v=vs.85).aspx))。我最初怀疑这是我看到的问题,但事实是我与AppRollback上下文有相同的问题,这表明它可能并非如此。但总的来说,可以按照[链接](http://www.goodjobsucking.com/?p=62)中所述安装自动释放卷影副本。不过,我宁愿使用powershell,而不是在那里提出的解决方案。 –
如果您无法使WMI正常工作,也许尝试将[AlphaVSS程序集](http://alphavss.codeplex.com/)加载到Powershell中。 [这里是如何创建一个快照,装载它,并在C#中删除它](http://pastebin.com/XhVLyq0m),你应该能够将它转换为PowerShell。 –