Template Discovery Job

VKernel.CapacityAnalyzer.TemplateDiscovery (Discovery)

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.2012.VMMManagementServer
EnabledTrue
Frequency14400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
  • VKernel.CapacityAnalyzer.Template
    • DisplayName
    • VMMId
    • Name
    • CPUReserve
    • CPUMax
    • RelativeWeight
    • MemoryWeight
    • VirtualizationPlatform
    • IsHighlyAvailable
    • OperatingSystem
    • DynamicMemoryEnabled
    • DynamicMemoryMaximumMB
    • DynamicMemoryBufferPercentage
    • CPUCount
    • IsTemplate
    • CreationTime
    • ModifiedTime
    • TotalVHDCapacity

Member Modules:

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

Source Code:

<Discovery ID="VKernel.CapacityAnalyzer.TemplateDiscovery" Enabled="true" Target="SCVMM2012DiscoveryMP!Microsoft.SystemCenter.VirtualMachineManager.2012.VMMManagementServer" ConfirmDelivery="true" Remotable="false" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="VKernel.CapacityAnalyzer.Template">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="VMMId"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="Name"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="CPUReserve"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="CPUMax"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="RelativeWeight"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="MemoryWeight"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="VirtualizationPlatform"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="IsHighlyAvailable"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="OperatingSystem"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="DynamicMemoryEnabled"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="DynamicMemoryMaximumMB"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="DynamicMemoryBufferPercentage"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="CPUCount"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="IsTemplate"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="CreationTime"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="ModifiedTime"/>
<Property TypeID="VKernel.CapacityAnalyzer.Template" PropertyID="TotalVHDCapacity"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="TemplareJob.ps1" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>TemplateDiscovery.ps1</ScriptName>
<ScriptBody><Script>
$oAPI = new-object -comObject "MOM.ScriptAPI"
$SourceId = "$MPElement$"
$ManagedEntityId = "$Target/Id$"
$ComputerName = "$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$"
$oDiscoveryData = $oAPI.CreateDiscoveryData(0, $SourceId, $ManagedEntityId);

Import-Module VirtualMachineManager

trap [Exception]
{
$oAPI.LogScriptEvent("TemplateDiscovery.ps1", 101, 2, $_.Exception.Message);
continue;
}

function WriteVMProperty ($oInst, $vm, $isTemplate)
{
$VmmGuid = $vm.ID.ToString()

$oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $vm.Name.ToString());
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/Name$", $vm.Name.ToString());

$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/VMMId$", $VmmGuid);
$oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $ComputerName);
if ($vm.CPUReserve -ne $null)
{
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/CPUReserve$", $vm.CPUReserve.ToString());
}
if ($vm.CPUMax -ne $null)
{
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/CPUMax$", $vm.CPUMax.ToString());
}
if ($vm.RelativeWeight -ne $null)
{
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/RelativeWeight$", $vm.RelativeWeight.ToString());
}
if ($vm.MemoryWeight -ne $null)
{
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/MemoryWeight$", $vm.MemoryWeight.ToString());
}
if ($vm.VirtualizationPlatform -ne $null)
{
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/VirtualizationPlatform$", $vm.VirtualizationPlatform.ToString());
}
if ($vm.IsHighlyAvailable -ne $null)
{
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/IsHighlyAvailable$", $vm.IsHighlyAvailable.ToString());
}
if ($vm.OperatingSystem -ne $null)
{
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/OperatingSystem$", $vm.OperatingSystem.ToString());
}
if ($vm.CPUCount -ne $null)
{
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/CPUCount$", $vm.CPUCount.ToString());
}

#Dynamic memory properties
$dynamicMemoryEnabled = $false;
$dynamicMemoryMaximumMB = 0;
$dynamicMemoryBufferPercentage = 0;

if ($vm.DynamicMemoryEnabled -ne $null)
{
$dynamicMemoryEnabled = $vm.DynamicMemoryEnabled;

if ($dynamicMemoryEnabled -ne $false)
{
$dynamicMemoryMaximumMB = $vm.DynamicMemoryMaximumMB;
$dynamicMemoryBufferPercentage = $vm.DynamicMemoryBufferPercentage;
}
}

$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/DynamicMemoryEnabled$", $dynamicMemoryEnabled.ToString());
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/DynamicMemoryMaximumMB$", $dynamicMemoryMaximumMB.ToString());
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/DynamicMemoryBufferPercentage$", $dynamicMemoryBufferPercentage.ToString());

$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/IsTemplate$", $isTemplate.ToString());
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/CreationTime$", $vm.CreationTime.ToString());
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/ModifiedTime$", $vm.ModifiedTime.ToString());

$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.Template']/TotalVHDCapacity$", $vm.TotalVHDCapacity.ToString());
}

#Connecting to VMM Server
$vmm = $null;
$vmm = Get-VMMServer -ComputerName $ComputerName

$templates = Get-Template | where {$_.Name -notlike "Temporary*"}
if (!($templates -eq $null)) {
foreach ($tmpl in $templates)
{
$oInst = $oDiscoveryData.CreateClassInstance("$MPElement[Name='VKernel.CapacityAnalyzer.Template']$")
WriteVMProperty $oInst $tmpl $true
$oDiscoveryData.AddInstance($oInst)
}
}

# Return the discovery data by calling the variable
$oDiscoveryData
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>