这里是Powershell新手,所以如果以下问题很愚蠢,请多多包涵......
我想在 Powershell 中创建一个 VSS 快照,并找到了许多使用 WMI 函数来执行此操作的示例。常见的模式是
# Pattern 1
$class=[WMICLASS]"root\cimv2:win32_shadowcopy"
$class.create("C:\", "ClientAccessible")
# Pattern 2
(gwmi -List Win32_ShadowCopy).Create("C:\", "ClientAccessible")
我看到的所有代码都是使用 Powershell 的 WMI cmdlet。但是,根据大量参考资料(例如此处),我的印象是我们不应再使用 WMI cmdlet 。
因此,我试图找出如何仅使用 CIM cmdlet 创建 VSS 快照,但没有成功。第一个想法是创建一个新Win32_ShadowCopy
实例,根据需要设置它的属性并调用Create
它的方法。这在第一步中失败了:
PS C:\Users\Administrator> New-CimInstance Win32_ShadowCopy
New-CimInstance : Not supported
At line:1 char:1
+ New-CimInstance Win32_ShadowCopy
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotImplemented: (Win32_ShadowCopy:CimInstance) [New-CimInstance], CimException
+ FullyQualifiedErrorId : HRESULT 0x8004100c,Microsoft.Management.Infrastructure.CimCmdlets.NewCimInstanceCommand
显然New-CimInstance
没有为Win32_ShadowCopy
.
在进一步研究期间,还发现(与 WMI cmdlet 相比)CIM cmdlet 不返回Create
可以调用该方法的对象(我已从以下代码的输出中删除了一些空行):
PS C:\Users\Administrator> get-cimclass -Class Win32_ShadowCopy
NameSpace: ROOT/cimv2
CimClassName CimClassMethods CimClassProperties
------------ --------------- ------------------
Win32_ShadowCopy {Create, Revert} {Caption, Description, InstallDate, Name...}
PS C:\Users\Administrator> get-wmiobject -List Win32_ShadowCopy
NameSpace: ROOT\cimv2
Name Methods Properties
---- ------- ----------
Win32_ShadowCopy {Create, Revert} {Caption, ClientAccessible, Count, Description...}
据我了解,以上显示返回的对象get-cimclass
和get-wmiobject
两者都应该公开相同的方法。但是,当我们尝试调用该Create
方法时:
PS C:\Users\Administrator> $(get-wmiobject -List win32_shadowcopy).Create("C:\", "ClientAccessible")
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 2
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
ReturnValue : 0
ShadowID : {8918619B-BE7F-4FE2-9B9C-C6B3B71CC749}
PSComputerName :
PS C:\Users\Administrator> $(get-cimclass -Class Win32_ShadowCopy).Create("C:\", "ClientAccessible")
Method invocation failed because [Microsoft.Management.Infrastructure.CimClass] does not contain a method named 'Create'.
At line:1 char:3
+ $(get-cimclass -Class Win32_ShadowCopy).Create("C:\", "ClientAccessib ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
显然,我不能get-cimclass
用来创建卷影副本。对于get-ciminstance
;也是如此。后者失败并显示相同的错误消息,就get-cimclass
好像至少一个快照已经存在,否则会抛出另一个错误,因为返回的对象是空的。
那么我需要做什么才能仅使用 CIM cmdlet 创建卷影副本?