在Hyper-V 2008 R2和Hyper-V 2012中,我使用以下代碼查找與VHD文件關聯的VM名稱。它工作得很好Msvm_ResourceAllocationSettingData類屬性連接中的Hyper-V 2012 R2 WMI錯誤
功能strGetVMname(strVHD)
設置VMList = objWMIService.ExecQuery( 「SELECT * FROM Msvm_ComputerSystem其中標題= '虛擬機'」)
For Each VirtualMachine in VMList
Set vm = GetComputerSystem(VirtualMachine.ElementName)
strQuery = "ASSOCIATORS OF {" & vm.Path_.Path & "} WHERE resultClass = Msvm_VirtualSystemSettingData"
set virtualSystemSetting = objWMIService.ExecQuery(strQuery).ItemIndex(0)
strQuery = Format1("ASSOCIATORS OF {{0}} WHERE " &_
" resultClass = Msvm_ResourceAllocationSettingData" &_
" AssocClass = Msvm_VirtualSystemSettingDataComponent " &_
" ResultRole = PartComponent " &_
" Role = GroupComponent", virtualSystemSetting.Path_.Path)
set objInstances = objWMIService.ExecQuery(strQuery)
for each Instance in objInstances
If (Instance.ResourceSubType = "Microsoft Virtual Hard Disk") Then
strMatch = InStr(1,Instance.Connection(0),strVHD,1)
If (strMatch = 1) Then
strGetVMname = VirtualMachine.ElementName
exit for
End If
End If
next
Next
端功能
這在Hyper-V 2012 R2中不再適用。我注意到WMI服務已更改爲\。\ root \ virtualization \ v2。所以,我已經改變了代碼
功能strGetVMname(strVHD)
設置VMList = objWMIService.ExecQuery( 「SELECT * FROM Msvm_ComputerSystem其中標題= '虛擬機'」)
For Each VirtualMachine in VMList
Set vm = GetComputerSystem(VirtualMachine.ElementName)
strQuery = "ASSOCIATORS OF {" & vm.Path_.Path & "} WHERE resultClass = Msvm_VirtualSystemSettingData"
set virtualSystemSetting = objWMIService.ExecQuery(strQuery).ItemIndex(0)
strQuery = Format1("ASSOCIATORS OF {{0}} WHERE " &_
" resultClass = Msvm_ResourceAllocationSettingData" &_
" AssocClass = Msvm_VirtualSystemSettingDataComponent " &_
" ResultRole = PartComponent " &_
" Role = GroupComponent", virtualSystemSetting.Path_.Path)
set objInstances = objWMIService.ExecQuery(strQuery)
for each Instance in objInstances
If (Instance.ResourceSubType = "Microsoft:Hyper-V:Synthetic Disk Drive") Then
strMatch = InStr(1,Instance.Connection(0),strVHD,1)
If (strMatch = 1) Then
strGetVMname = VirtualMachine.ElementName
exit for
End If
End If
next
Next
端功能
事情工作正常,除了資源類型'微軟虛擬硬盤'不存在了。這是一個「微軟:Hyper-V:合成磁盤驅動器」現在硬盤。 當我更改代碼以反映新名稱時,我無法從Instance.Connection(0)中獲取對象。 類型不匹配碼錯誤代碼800A000D
任何人都可以幫助我得到這個腳本在2012 R2的工作?或PowerShell腳本中的任何幫助
感謝您的提示。我真的在尋找很久。這裏有人發佈了一個更完整的例子:https://social.msdn.microsoft.com/Forums/windowsserver/en-US/a7c58caa-5efa-408f-bb73-5e72dd22f43c/hyperv-wmi-provider-v2-msvmresourceallocationsettingdata-class?論壇= servervirtualization –