How to get data (like the integration services version) from Msvm_KvpExchangeDataItem in Hyper-V


Today, if you are using VMM, you can quickly and easily find out if your VM has the integration components installed by using this simple PowerShell script.


<<


PS D:\Windows\system32> get-vm | select name, hostname, hasvmadditions, vmaddition | format-list



Name           : vmonmlmich
HostName       : car-1.contoso.com
HasVMAdditions : False
VMAddition     : Not Detected


 


Name           : win2k8r2
HostName       : AMUNRA.contoso.com
HasVMAdditions : True
VMAddition     : Detected
>>


The problem is that VMM does not give you the version information for the Integration Components in Hyper-V. if you would like to get that data, you need to use the Msvm_KvpExchangeDataItem property. Below is a script and its output that gives you all that data for all Running VMs with Integration Components installed in Hyper-V.


<<


Option Explicit


Dim WMIService
Dim KvpComponents
Dim VMList
Dim VM
Dim item
Dim component
Dim xml
Dim nodeValue
Dim nodeName


‘Create the XML component
Set xml = createObject(“MSXML2.DOMDOCUMENT.3.0”)



‘Get instance of ‘virtualization’ WMI service on the local computer
Set WMIService = GetObject(“winmgmts:\\.\root\virtualization”)


‘Get all the MSVM_ComputerSystem object
Set VMList = WMIService.ExecQuery(“SELECT * FROM Msvm_ComputerSystem”)   
For Each VM In VMList  
 if VM.Caption = “Virtual Machine” then      
 WScript.Echo “========================================”      
 WScript.Echo “VM Name: ” & VM.ElementName      
 WScript.Echo “VM GUID: ” & VM.Name
 WScript.Echo “VM State: ” & VM.EnabledState   
 
 if VM.EnabledState <> 2 then
  Wscript.Echo “VM is not in a running state, so no KVPs can be exchanged”  
 end if


 ‘ Get the list of KvpComponents
 Set KvpComponents = WMIService.ExecQuery(“SELECT * FROM Msvm_KvpExchangeComponent”) ‘.ItemIndex(0)


 For Each component in KvpComponents


  ‘ ensure that we are displaying the correct settings for the VM based on its instance ID/Name
  If UCase(component.SystemName) = UCase(VM.Name) then


   Dim GuestItems
    GuestItems = component.GuestIntrinsicExchangeItems
 
   ‘ Now enumerate the Msvm_KvpExchangeDataItem’s that are in XML format
   For Each item In GuestItems


  xml.async = false
  xml.resolveExternals = false
  xml.validateOnParse = false
  xml.loadXML item


   If xml.parseError.errorCode Then
         Wscript.Echo “–> Xml Document Parse Error: ” & vbcrlf & _
                     ” Reason = ”  & xml.parseError.reason & vbcrlf & _
                     ” Line = ”    & xml.parseError.line & vbcrlf & _
                     ” linePos = ” & xml.parseError.linePos & vbcrlf & _
                    ” srcText = ” & xml.parseError.srcText & vbcrlf & _
                    ” ErrorCode = ” & xml.parseError.ErrorCode & vbcrlf
         ‘WScript.quit
   Else
   xml.setProperty “SelectionLanguage”, “XPath”
   set nodeName = xml.selectSingleNode(“//INSTANCE/PROPERTY[@NAME=’Name’]”)
   set nodeValue = xml.selectSingleNode(“//INSTANCE/PROPERTY[@NAME=’Data’]”)
   Wscript.Echo nodeName.Text & ” –> ” & nodeValue.Text
  End If


   Next
  End If
 Next


 end if
Next
>>


 


Here is some example output as well. The Integration components version is the IntegrationServicesVersion property:


<<


========================================
VM Name: win2k8r2
VM GUID: 1D157259-F91F-4C61-8A1E-72F2C5BC112D
VM State: 2
FullyQualifiedDomainName –> MLMICH-WIN2K8-1.contoso.com
OSName –> Windows Server 2008 R2 Enterprise
OSVersion –> 6.1.7056
CSDVersion –>
OSMajorVersion –> 6
OSMinorVersion –> 1
OSBuildNumber –> 7056
OSPlatformId –> 2
ServicePackMajor –> 0
ServicePackMinor –> 0
SuiteMask –> 274
ProductType –> 3
OSEditionId –> 10
ProcessorArchitecture –> 9
IntegrationServicesVersion –> 6.1.7056.0
NetworkAddressIPv4 –> 172.30.181.72
NetworkAddressIPv6 –> 2001:4898:2a:3:8531:2f57:144c:3ce8;fe80::8531:2f57:144c:3ce8%14;2001:4898:0:fff:0:5efe:172.30.181.72;fe80::5efe:172.30.181.72%15
RDPAddressIPv4 –> 172.30.181.72
RDPAddressIPv6 –> 2001:4898:2a:3:8531:2f57:144c:3ce8;fe80::8531:2f57:144c:3ce8%14;2001:4898:0:fff:0:5efe:172.30.181.72;fe80::5efe:172.30.181.72%15
========================================


>>

Comments (0)