Hyper-V MPE 2012 Virtual Machine Integration Services Script Discovery

HyperVMPE2012.VirtualMachineIntegrationServices.ScriptDiscovery (Discovery)

Element properties:

TargetMicrosoft.Windows.HyperV.2012.VirtualMachine
EnabledTrue
Frequency43200
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
ScriptPowershell DataSource Microsoft.Windows.TimedPowerShell.DiscoveryProvider Default

Source Code:

<Discovery ID="HyperVMPE2012.VirtualMachineIntegrationServices.ScriptDiscovery" Enabled="true" Target="MSWinHV2012Dis!Microsoft.Windows.HyperV.2012.VirtualMachine" ConfirmDelivery="true" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="HyperVMPE2012.VirtualMachineIntegrationServices">
<Property TypeID="HyperVMPE2012.VirtualMachineIntegrationServices" PropertyID="ISVersion"/>
<Property TypeID="HyperVMPE2012.VirtualMachineIntegrationServices" PropertyID="ISState"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent" PropertyID="DeviceId"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent" PropertyID="VirtualMachineName"/>
<Property TypeID="SLib!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="ScriptPowershell" TypeID="MSWinLib!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>43200</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoveryIntegrationServices.PS.ps1</ScriptName>
<ScriptBody><Script>
param($sourceId,$managedEntityId,$computerName,$virtualMachineID,$virtualMachineName)

#Classes for Hyper-V 2012
$VMMS = gwmi -namespace root\virtualization\v2 Msvm_VirtualSystemManagementService

#SCOM
$api = New-Object -comObject 'MOM.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)

$RequestedSummaryInformationArray = 1,123

$VM = Get-WmiObject -Namespace root/virtualization/v2 -query "Select * from Msvm_VirtualSystemSettingData where ElementName = '$virtualMachineName'"

$vmSummaryInformation = $VMMS.GetSummaryInformation($VM, $RequestedSummaryInformationArray).SummaryInformation

[string]$version = (get-vm -Name $VM.ElementName).integrationservicesversion

switch ($vmSummaryInformation[0].IntegrationServicesVersionState)
{
1 {$vmIntegrationServicesVersionState = "Up-to-date"}
2 {$vmIntegrationServicesVersionState = "Version Mismatch"}
default {$vmIntegrationServicesVersionState = "Unreacheable or PowerOff VM"}
}

#Create a class instance for each.
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='HyperVMPE2012.VirtualMachineIntegrationServices']$")

#Key Properties (required)
$instance.AddProperty("$MPElement[Name='MSWinLib!Microsoft.Windows.Computer']/PrincipalName$",$computerName)
$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.ServerRole']/ServerId$",$computerName)
$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine']/VirtualMachineId$",$virtualMachineID)
$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent']/DeviceId$",$virtualMachineName)

$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent']/VirtualMachineName$", $virtualMachineName)
$instance.AddProperty("$MPElement[Name='HyperVMPE2012.VirtualMachineIntegrationServices']/ISVersion$",$version)
#$api.LogScriptEvent("Discovery Integration Services ",21,0, "Version: " + $version)
$instance.AddProperty("$MPElement[Name='HyperVMPE2012.VirtualMachineIntegrationServices']/ISState$",$vmIntegrationServicesVersionState)
#$api.LogScriptEvent("Discovery Integration Services ",21,0, "Version: " + $vmIntegrationServicesVersionState)


$instance.AddProperty("$MPElement[Name='SLib!System.Entity']/DisplayName$",$virtualMachineName)

$discoveryData.AddInstance($instance)

#Return the discovery data.
$discoveryData
</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>sourceID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>managedEntityID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>computerName</Name>
<Value>$Target/Host/Host/Property[Type="MSWinLib!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>virtualMachineID</Name>
<Value>$Target/Property[Type="MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine"]/VirtualMachineId$</Value>
</Parameter>
<Parameter>
<Name>virtualMachineName</Name>
<Value>$Target/Property[Type="MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine"]/VirtualMachineName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>240</TimeoutSeconds>
</DataSource>
</Discovery>