Discover Hyper-V Host Logical Disks

VKernel.CapacityAnalyzer.HostLogicalDisksDiscovery (Discovery)

Element properties:

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

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

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

Source Code:

<Discovery ID="VKernel.CapacityAnalyzer.HostLogicalDisksDiscovery" Enabled="true" Target="SCVMM2012DiscoveryMP!Microsoft.SystemCenter.VirtualMachineManager.2012.HyperVHost" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="VKernel.CapacityAnalyzer.HostLogicalDisk">
<Property TypeID="VKernel.CapacityAnalyzer.HostLogicalDisk" PropertyID="DeviceID"/>
<Property TypeID="VKernel.CapacityAnalyzer.HostLogicalDisk" PropertyID="Name"/>
<Property TypeID="VKernel.CapacityAnalyzer.HostLogicalDisk" PropertyID="Size"/>
<Property TypeID="VKernel.CapacityAnalyzer.HostLogicalDisk" PropertyID="FileSystem"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="VKernel.CapacityAnalyzer.HostLogicalDisk" PropertyID="InterfaceType"/>
<Property TypeID="VKernel.CapacityAnalyzer.HostLogicalDisk" PropertyID="DriveSerialNumber"/>
<Property TypeID="VKernel.CapacityAnalyzer.HostLogicalDisk" PropertyID="DriveSignature"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverLogicalDisks.js</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$ $Target/Property[Type="SCVMMLibraryMP!Microsoft.SystemCenter.VirtualMachineManager.VMHost"]/VMMId$ 0</Arguments>
<ScriptBody><Script>
var oShell = new ActiveXObject("WScript.Shell");
var oAPI = WScript.CreateObject("MOM.ScriptAPI");
var oArgs = WScript.Arguments;
var loggingOn = oArgs.Item(4) == "1";

if (loggingOn)
oShell.LogEvent(2, "Host Logical Disks Discovery started");

var SourceId = oArgs.Item(0);
var ManagedEntityId = oArgs.Item(1);
var ComputerName = oArgs.Item(2);
var VmmGuid = oArgs.Item(3);
var locator = WScript.CreateObject("WbemScripting.SWbemLocator");
var services = locator.ConnectServer(ComputerName, "root\\cimv2");
var diskEnum = new Enumerator(services.ExecQuery("select * from Win32_LogicalDisk where DriveType=3", "WQL", 0x20));
var oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId);
var cnt = 0;

for (; !diskEnum.atEnd(); diskEnum.moveNext())
{
var diskObj = diskEnum.item();
WScript.Echo(diskObj.Name);
var partEnum = new Enumerator(diskObj.Associators_("Win32_LogicalDiskToPartition", "Win32_DiskPartition", "", "", false, false, "", "", 0x20));
var partObj = null;

for (; !partEnum.atEnd(); partEnum.moveNext())
{
partObj = partEnum.item();
break;
}

if (partObj == null)
continue;

WScript.Echo(partObj.Caption);
var diskDriveEnum = new Enumerator(partObj.Associators_("Win32_DiskDriveToDiskPartition", "Win32_DiskDrive", "", "", false, false, "", "", 0x20));
var diskDriveObj = null;

for (; !diskDriveEnum.atEnd(); diskDriveEnum.moveNext())
{
diskDriveObj = diskDriveEnum.item();
break;
}

if (diskDriveObj == null)
continue;

var oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='VKernel.CapacityAnalyzer.HostLogicalDisk']$")

try {
oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", ComputerName);
oInst.AddProperty("$MPElement[Name='SCVMMLibraryMP!Microsoft.SystemCenter.VirtualMachineManager.VMHost']/VMMId$", VmmGuid);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.HostLogicalDisk']/FileSystem$", diskObj.FileSystem);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.HostLogicalDisk']/Size$", diskObj.Size);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.HostLogicalDisk']/DeviceID$", diskObj.DeviceID);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.HostLogicalDisk']/Name$", diskObj.Name);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.HostLogicalDisk']/InterfaceType$", diskDriveObj.InterfaceType);
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.HostLogicalDisk']/DriveSerialNumber$", String(diskDriveObj.SerialNumber));
oInst.AddProperty("$MPElement[Name='VKernel.CapacityAnalyzer.HostLogicalDisk']/DriveSignature$", String(diskDriveObj.Signature));
oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", diskObj.Name);

oDiscoveryData.AddInstance(oInst);
cnt++;
}
catch (err)
{
oShell.LogEvent(2, "Host Logical Disks Discovery error: " + err.description);
}
}

if (loggingOn)
oShell.LogEvent(2, "Host Logical Disks Discovery finished: " + cnt + " disks got");

oAPI.Return(oDiscoveryData);
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>