Microsoft.SystemCenter.VirtualMachineManager.2016.VirtualizationCandidateComputerDiscovery (DataSourceModuleType)
Element properties: Member Modules:
Overrideable Parameters:
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>