快照 WMI 查询 returns 无

Snapshot WMI Query returns nothing

-> $VMs = Get-WmiObject -Class "Msvm_ComputerSystem" -Namespace "root\virtualization\v2"
-> $vm = $VMs[1]
-> Get-WmiObject -Namespace "root\virtualization\v2" -Query "Associators Of {$vm} Where AssocClass=Msvm_ElementSettingData ResultClass=Msvm_VirtualSystemSettingData"

我就是那样用的,但 returns 什么都没有。 VM 有 2 个检查点。但是returns什么都没有。

我知道以下命令,但需要像上面那样的查询。以下命令运行无误。

-> Get-VM | Get-VMSnapshot

[注意:下面的命令都需要 Powershell 是 运行 作为管理员。如果不是,你将永远得到零结果,IMX。]

无论我如何编写查询,我要么没有输出,要么出现错误。这似乎是此 class 和名称空间的一个非常普遍的问题。在网上搜索发现很多人都有这个问题。 This looked like the best overall example/workaround.

从 link 开始,这确实有效:

$VMs = Get-WmiObject -Namespace root\virtualization\v2 -ClassName Msvm_ComputerSystem
$VM = $VMs[1]

# This returns several results
$VM.GetRelated('Msvm_VirtualSystemSettingData')

# This returns one result
$VM.GetRelated('Msvm_VirtualSystemSettingData','Msvm_SettingsDefineState',$null,$null,$null,$null,$false,$null)

我没有看到 the class documentation, but I believe that it's inherited from the ManagementObject 中记录的 GetRelated() 方法。


就是说,我可以使用较新的 CIM cmdlet 获得略有不同的版本(请参阅 Powershell v5.1 或 7 上的 Get-Command -Module CimCmdlets),无论如何我都建议使用这些。 Get-WmiObject 已被 Powershell v3 中的 CIM cmdlet 取代。最大的好处之一是您不再需要处理 WQL 中令人讨厌的 ASSOCIATORS OF 语法。您可以只使用 Get-CimAssociatedInstance.

$VMs = Get-CimInstance -Namespace root\virtualization\v2 -ClassName Msvm_ComputerSystem
$VM = $VMs[1]
$VM | Get-CimAssociatedInstance -ResultClassName Msvm_VirtualSystemSettingData

以上对我有用。从好的方面来说,此代码也适用于没有 Get-WmiObject.

的 Powershell v6 和 v7