我正在编写一个PowerShell脚本,用于使用rsync备份Windows计算机。为此,我尝试从该脚本中使用WMI创建一个非持久性的带有写入器参与的Shadow副本(这似乎是备份推荐的方法)。
我从另一个问题(通过Powershell访问卷影副本(VSS)快照)中找到了一种创建通用阴影副本的方法,但那里给出的示例使用"ClientAccessible"作为上下文参数,这会导致创建一个具有持久性的阴影副本而没有写入器参与。
在寻找解决方案时,我发现可以使用以下命令获取一个上下文列表,我认为这些上下文是由WMI理解的:
它确实有一个名为“备份”的上下文,这正是我想要的。我继续尝试使用该上下文创建一个非持久性的阴影副本:
然而,这似乎失败了,$shadow 变量的内容被设置为...
根据相关文档(Win32_ShadowCopy类的创建方法),返回值意味着“不支持的影像副本上下文”。
我找不到任何相关文档说明为什么不支持这个上下文,或者是否可以使用它。我还尝试了“FileShareBackup”和“AppRollback”上下文,但没有成功。
我猜我可能漏掉了一些明显的东西,WMI可能真的只支持“clientAccessible”来创建影像副本,或者这取决于操作系统(我在64位的Windows 7上进行测试)。
我该如何让它工作?
我从另一个问题(通过Powershell访问卷影副本(VSS)快照)中找到了一种创建通用阴影副本的方法,但那里给出的示例使用"ClientAccessible"作为上下文参数,这会导致创建一个具有持久性的阴影副本而没有写入器参与。
在寻找解决方案时,我发现可以使用以下命令获取一个上下文列表,我认为这些上下文是由WMI理解的:
Get-WmiObject win32_shadowcontext | Out-GridView
它确实有一个名为“备份”的上下文,这正是我想要的。我继续尝试使用该上下文创建一个非持久性的阴影副本:
$shadow = (Get-WmiObject -list win32_shadowcopy).Create("C:\", "Backup")
然而,这似乎失败了,$shadow 变量的内容被设置为...
ReturnValue : 5
ShadowID : {00000000-0000-0000-0000-000000000000}
根据相关文档(Win32_ShadowCopy类的创建方法),返回值意味着“不支持的影像副本上下文”。
我找不到任何相关文档说明为什么不支持这个上下文,或者是否可以使用它。我还尝试了“FileShareBackup”和“AppRollback”上下文,但没有成功。
我猜我可能漏掉了一些明显的东西,WMI可能真的只支持“clientAccessible”来创建影像副本,或者这取决于操作系统(我在64位的Windows 7上进行测试)。
我该如何让它工作?
NoAutoRelease
标志设置为true
。另外,要将NoAutoRelease
设置为 true,必须将Persistent
设置为true
。所以,只是提醒您不要花太多时间尝试让除ClientAccessable
之外的其他东西工作(ClientAccessable
同时设置了这两个变量为true
)。 - Scott Chamberlain