<ProbeActionModuleType ID="QND.Hyperv.2012R2.VMDiscovery.PT" Accessibility="Public" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TimeoutSeconds" type="xsd:int" minOccurs="0" maxOccurs="1" default="60"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TraceLevel" type="xsd:int" minOccurs="0" maxOccurs="1"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TargetComputer" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
<OverrideableParameter ID="TraceLevel" ParameterType="int" Selector="$Config/TraceLevel$"/>
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<ProbeAction ID="Discovery" TypeID="Windows!Microsoft.Windows.PowerShellDiscoveryProbe">
<ScriptName>Discover-VM.ps1</ScriptName>
<ScriptBody><Script>#TO SHOW VERBOSE MESSAGES SET $VerbosePreference="continue"
#SET ErrorLevel to 5 so show discovery info
#*************************************************************************
# Script Name - Discover-VM.ps1
# Author - - Progel spa
# Version - 24.09.2007
# Purpose -
#
# Assumptions -
#
#
# Parameters - TraceLevel
# - ComputerName
# - SourceId
# - ManagedEntityId
# Command Line - .\test.ps1 4 "serverName" '{1860E0EB-8C21-41DA-9F35-2FE9343CCF36}' '{1860E0EB-8C21-41DA-9F35-2FE9343CCF36}'
# If discovery must be added the followinf parameters
# SourceId ($ MPElement $ )
# ManagedEntityId ($ Target/Id $)
#
# Output properties
#
# Status
#
# $Version$ History
# 1.0 06.08.2010 DG First Release
# 1.5 15.02.2014 DG minor cosmetics
#
# (c) Copyright 2015, Progel spa, All Rights Reserved
# Proprietary and confidential to Progel srl
#
#*************************************************************************
# Get the named parameters
param([int]$traceLevel=$(throw 'must have a value'),
[string]$HostComputerIdentity=$(throw 'must have a value'),
[string]$sourceID=$(throw 'must have a value'),
[string]$ManagedEntityId=$(throw 'must have a value'))
Function Throw-EmptyDiscovery
{
param($SourceId, $ManagedEntityId)
$oDiscoveryData = $g_API.CreateDiscoveryData(0, $SourceId, $ManagedEntityId)
Log-Event $FAILURE_EVENT_ID $EVENT_TYPE_WARNING "Exiting with empty discovery data" $TRACE_INFO
$oDiscoveryData
If($traceLevel -eq $TRACE_DEBUG)
{
#just for debug proposes when launched from command line does nothing when run inside OpsMgr Agent
$g_API.Return($oDiscoveryData)
}
}
Function Throw-KeepDiscoveryInfo
{
param($SourceId, $ManagedEntityId)
$oDiscoveryData = $g_API.CreateDiscoveryData(0,$SourceId,$ManagedEntityId)
#Instead of Snapshot discovery, submit Incremental discovery data
$oDiscoveryData.IsSnapshot = $false
Log-Event $FAILURE_EVENT_ID $EVENT_TYPE_WARNING "Exiting with null non snapshot discovery data" $TRACE_INFO
$oDiscoveryData
If($traceLevel -eq $TRACE_DEBUG)
{
#just for debug proposes when launched from command line does nothing when run inside OpsMgr Agent
$g_API.Return($oDiscoveryData)
}
}
#endregion
if($vm.IntegrationServicesVersion) {$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/ISVersion$", $vm.IntegrationServicesVersion.ToString())}
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/RMEnabled$", (NullIsFalse $vm.ResourceMeteringEnabled))
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/VMGeneration$", (NullIsZero $vm.Generation))
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/HA$", (NullIsFalse $vm.IsClustered))
#there's a bug in HypervPOSH for fixed memory VMs, sometimes wrong values are returned for minimum and maximum memory
if($vm.DynamicMemoryEnabled) {
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/MinMemory$", (NullIsZero ($vm.MemoryMinimum/1MB)))
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/MaxMemory$", (NullIsZero ($vm.MemoryMaximum/1MB)))
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/StartMemory$", (NullIsZero ($vm.MemoryStartup/1MB)))
}
else {
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/MinMemory$", (NullIsZero ($vm.MemoryStartup/1MB)))
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/MaxMemory$", (NullIsZero ($vm.MemoryStartup/1MB)))
$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/StartMemory$", (NullIsZero ($vm.MemoryStartup/1MB)))
}
if((NullIsFalse $vm.IsClustered) -eq $true) {$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/HVFarm$", $HVFarm)}
else {$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/HVFarm$", $HostComputerIdentity)}
if (![String]::IsNullOrEmpty($computerName)) {$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/VMComputerName$", $computerName)}
if (![String]::IsNullOrEmpty($OSName)) {$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/OSName$", $OSName)}
if (![String]::IsNullOrEmpty($OSVersion)) {$oInstance.AddProperty("$MPElement[Name='QND.Hyperv.2012R2.VM']/OSVersion$", $OSVersion)}
Log-Event $STOP_EVENT_ID $EVENT_TYPE_SUCCESS ("$($vm.VMName) has been discovered on $HostComputerIdentity") $TRACE_INFO
}
Catch [Exception] {
Log-Event $STOP_EVENT_ID $EVENT_TYPE_ERROR ("Failed to discover $($vm.VMName) on $HostComputerIdentity $($Error[0].Exception)") $TRACE_ERROR
}
}
$oDiscoveryData
If ($traceLevel -eq $TRACE_DEBUG)
{
#just for debug proposes when launched from command line does nothing when run inside OpsMgr Agent
#it breaks in exception when run insde OpsMgr and POSH IDE
$g_API.Return($oDiscoveryData)
}