param( [Parameter(Mandatory)] [string]$VMName ) $ns = 'root\virtualization\v2' $vm = Get-CimInstance -Namespace $ns -ClassName Msvm_ComputerSystem -Filter "ElementName = '$VMName'" if (-not $vm) { throw "VM '$VMName' not found." } $kvp = Get-CimAssociatedInstance -InputObject $vm -Association Msvm_SystemDevice | Where-Object CimClass -match 'Msvm_KvpExchangeComponent' # Intrinsic (Basic) Data $intrinsic = @() if ($kvp.GuestIntrinsicExchangeItems) { foreach ($xml in $kvp.GuestIntrinsicExchangeItems) { $x = [xml]$xml $intrinsic += [pscustomobject]@{ Name = $x.INSTANCE.PROPERTY | Where-Object { $_.Name -eq 'Name' } | Select-Object -Expand Value Data = $x.INSTANCE.PROPERTY | Where-Object { $_.Name -eq 'Data' } | Select-Object -Expand Value Source= 'Intrinsic' } } } # Exchange Data $exchange = @() if ($kvp.GuestExchangeItems) { foreach ($xml in $kvp.GuestExchangeItems) { $x = [xml]$xml $exchange += [pscustomobject]@{ Name = $x.INSTANCE.PROPERTY | Where-Object { $_.Name -eq 'Name' } | Select-Object -Expand Value Data = $x.INSTANCE.PROPERTY | Where-Object { $_.Name -eq 'Data' } | Select-Object -Expand Value Source= 'Exchange' } } } $all = $intrinsic + $exchange $all