Microsoft.SystemCenter.VirtualMachineManager.2016.VirtualizationCandidateComputerDiscovery (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource System.CommandExecuterDiscoveryDataSource Default

Overrideable Parameters:

IDParameterTypeSelector
IntervalSecondsint$Config/IntervalSeconds$

Source Code:

<DataSourceModuleType ID="Microsoft.SystemCenter.VirtualMachineManager.2016.VirtualizationCandidateComputerDiscovery" Accessibility="Internal">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="IntervalSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ComputerID" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="IsVirtualMachine" type="xsd:boolean"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" ParameterType="int" Selector="$Config/IntervalSeconds$"/>
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="System!System.CommandExecuterDiscoveryDataSource">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<ApplicationName>%windir%\System32\cscript.exe</ApplicationName>
<WorkingDirectory/>
<CommandLine>/nologo $file/DiscoverVirtualizationCandidateComputer.ps1$ -SourceId $MPElement$ -ManagedEntityId $Target/Id$ -TargetComputer $Config/ComputerID$</CommandLine>
<TimeoutSeconds>30</TimeoutSeconds>
<RequireOutput>true</RequireOutput>
<Files>
<File>
<Name>DiscoverVirtualizationCandidateComputer.ps1</Name>
<Contents><Script>param($SourceId, $ManagedEntityId, $TargetComputer)

$StrVirtualServerRegDir = "HKLM:\SYSTEM\CurrentControlSet\Services\Virtual Server";
$StrHyperVRegDir = "HKLM:\SYSTEM\CurrentControlSet\Services\vmms";

function HasRegistryKey(){
param($regDir)

$StrRegKey = "Start"

if(Test-Path $regDir){
try{
$holder = Get-ItemProperty -Path $regDir | Select-Object -ExpandProperty $StrRegKey;
return $true;
}
catch{
return $false;
}
}

return $false
}

# ------------------------------------------------------------------------
# For Microsoft VM's Win32_BaseBoard Manufacturer is set to Microsoft Corp.
# Use the same property to figure out if the Computer is a MS VM or not.
# This method is also used by OpsMgr discovery
# -------------------------------------------------------------------------
function IsMSVirtualMachine(){
return ((gcim Win32_BaseBoard).Manufacturer -eq "Microsoft Corporation")
}

# ----------------------------------------------------------
# For VMware VM's Check Win32_ComputerSystemProduct objects'
# Vendor property
# ----------------------------------------------------------
function IsVMwareVirtualMachine(){
return ((gcim Win32_ComputerSystemProduct).Vendor -eq "VMware, Inc.")
}

# ------------------------------------------------------------------
# Check if MS Virtualization Namespace is available (HyperV 1 and 2)
# ------------------------------------------------------------------
function MSVirtualizationEnabled(){
$error.clear()
$enabled = $false;

try{
gcim "Msvm_VirtualSystemManagementService" -namespace "root\virtualization\v2" -ErrorAction Stop;
$enabled = $true;
}
catch{
$enabled = $false;
}

return $enabled;
}

#=============
# Method: DiscoverVirtualizationCandidateComputer
# Description: This sub creates virtual machine computer instance and adds it to discovery data
#=============
function DiscoverVirtualizationCandidateComputer(){
param($oResultData, $hostComputer)

# Discover VirtualizationCandidateComputer instance
$oVMComputerInst = $oResultData.CreateClassInstance("$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.2016.VirtualizationCandidateComputer']$");
$oVMComputerInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $hostComputer);

# Add VirtualizationCandidateComputer instance to discovery data
$oResultData.AddInstance($oVMComputerInst);
}

$momAPI = new-object -comObject MOM.ScriptAPI;
$oDiscoveryData = $momAPI.CreateDiscoveryData(0, $SourceId, $ManagedEntityId);

if(!(IsMSVirtualMachine) -and !(IsVMwareVirtualMachine) -and !(HasRegistryKey($StrHyperVRegKey)) -and !(HasRegistryKey($StrVirtualServerRegKey)) -and !(MSVirtualizationEnabled)){
DiscoverVirtualizationCandidateComputer($oDiscoveryData, $TargetComputer);
}

$oDiscoveryData;
</Script></Contents>
</File>
</Files>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>