Virtual Machine Guest Disk Discovery

VKernel.CapacityAnalyzer.VmGuestDiskDiscovery (Discovery)

Element properties:

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

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

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

Source Code:

<Discovery ID="VKernel.CapacityAnalyzer.VmGuestDiskDiscovery" Enabled="true" Target="SCVMM2012DiscoveryMP!Microsoft.SystemCenter.VirtualMachineManager.2012.VMMManagementServer" ConfirmDelivery="true" Remotable="false" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="VKernel.CapacityAnalyzer.VmGuestDisk">
<Property TypeID="VKernel.CapacityAnalyzer.VmGuestDisk" PropertyID="DeviceID"/>
<Property TypeID="VKernel.CapacityAnalyzer.VmGuestDisk" PropertyID="Name"/>
<Property TypeID="VKernel.CapacityAnalyzer.VmGuestDisk" PropertyID="FileSystem"/>
<Property TypeID="VKernel.CapacityAnalyzer.VmGuestDisk" PropertyID="Size"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>VmGuestDiskDiscovery.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("VmGuestDiskDiscovery.ps1", 101, 2, $_.Exception.Message)
continue;
}

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

if ($vmm -ne $null)
{
$vms = Get-VM
foreach ($vm in $vms)
{
$VmmGuid = $vm.ID.ToString()
$vmName = $vm.ComputerName

if($vmName)
{
try
{
$disks = Get-WMIObject Win32_LogicalDisk -ComputerName $vmName -filter "DriveType=3"

if ($disks -eq $null)
{
$oAPI.LogScriptEvent("VmGuestDiskDiscovery.ps1", 101, 2, "No disk for $vmName. Did you set access rights for OpsMgrAction accout?");
continue;
}

foreach($disk in $disks)
{
$oInst = $oDiscoveryData.CreateClassInstance("$MPElement[Name='VKernel.CapacityAnalyzer.VmGuestDisk']$")

$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.VmGuestDisk']/DeviceID$", $disk.DeviceID.ToString());
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.VmGuestDisk']/Name$", $disk.Name.ToString());
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.VmGuestDisk']/Size$", $disk.Size.ToString());
$oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.VmGuestDisk']/FileSystem$", $disk.FileSystem.ToString());

$oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $ComputerName);

$oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $disk.Name.ToString());
$oInst.AddProperty("$MPElement[Name='SCVMMLibraryMP!Microsoft.SystemCenter.VirtualMachineManager.VirtualMachine']/VMMId$", $VmmGuid)

$oDiscoveryData.AddInstance($oInst)
}
}
catch [System.Exception]
{
$oAPI.LogScriptEvent("VmGuestDiskDiscovery.ps1", 101, 2, "No disk for $vmName. Did you set access rights for OpsMgrAction accout?");
}
}
}
}

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