Gegevensbronmodule voor detectie van virtuele netwerken

Microsoft.Windows.HyperV.Discovery.VirtualNetworkDiscoveryDataSourceModule (DataSourceModuleType)

Gegevensbronmodule voor detectie van Hyper-V-virtuele netwerken

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityPublic
RunAsSystem.PrivilegedMonitoringAccount
OutputTypeSystem.Discovery.Data

Member Modules:

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

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Interval in secondenInterval in seconden
TimeoutSecondsint$Config/TimeoutSeconds$Time-out in secondenTime-out in seconden
SyncTimestring$Config/SyncTime$SynchronisatietijdSynchronisatietijd

Source Code:

<DataSourceModuleType ID="Microsoft.Windows.HyperV.Discovery.VirtualNetworkDiscoveryDataSourceModule" Accessibility="Public" RunAs="System!System.PrivilegedMonitoringAccount" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="IntervalSeconds" type="xsd:int"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="0" name="SyncTime" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DataSource" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime>$Config/SyncTime$</SyncTime>
<ScriptName>DiscoverHyperVV2VirtualNetworks.ps1</ScriptName>
<ScriptBody><Script>
#Copyright (c) Microsoft Corporation. All rights reserved.
param($SourceId, $ManagedEntityId, $ComputerIdentity)

# Common Functions

function IsHigherThanWin2008
{
$osVersion = New-Object "Version" ([Environment]::OSVersion.Version.Major -As [Int32]), ([Environment]::OSVersion.Version.Minor -As [Int32]);
$osVersionTill2008=New-Object "Version" 6,1;
if ($osVersion -gt $osVersionTill2008)
{
return $true;
}
else
{
return $false;
}
}

function ThrowScriptError
{
param($msg, $errorDetails)
$errorMsg = $msg + $errorDetails;
$oApi.LogScriptEvent("DiscoverHyperVV2VirtualNetworks.ps1", 1000, 1, $errorMsg);
}

function ThrowScriptInfo
{
param($msg)
$oApi.LogScriptEvent("DiscoverHyperVV2VirtualNetworks.ps1", 1000, 4, $msg);
}
# End Common Functions


# Begin Main
$error.Clear();
$oApi = new-object -comObject 'MOM.ScriptAPI'
$oDiscoveryData = $oApi.CreateDiscoveryData(0, $SourceId, $ManagedEntityId);

$namespace = "root/virtualization/v2";


$query = "select * from Msvm_VirtualEthernetSwitch";
if(IsHigherThanWin2008)
{
$vSwitches = @(gcim -Query $query -Namespace $namespace -ComputerName $ComputerIdentity);
}
else
{
$vSwitches = @(gwmi -Query $query -Namespace $namespace -ComputerName $ComputerIdentity);
}

foreach($vswitch in $vswitches)
{
$internalQuery = "select * from Msvm_InternalEthernetPort where ElementName = '" + $vswitch.ElementName + "'";
$internalDeviceId = "";

if(IsHigherThanWin2008)
{
$internalvSwitches = @(gcim -Query $internalQuery -Namespace $namespace);
}
else
{
$internalvSwitches = @(gwmi -Query $internalQuery -Namespace $namespace);
}

if ($internalvSwitches -ne $null -and $internalvSwitches.Count -gt 0)
{
$internalDeviceIdArray = $internalvSwitches[0].DeviceID.split(":");
if ($internalDeviceIdArray -ne $null -and $internalDeviceIdArray.Count -gt 1)
{
$internalDeviceId = $internalDeviceIdArray[1];

$oInstance = $oDiscoveryData.CreateClassInstance("$MPElement[Name='HVLib!Microsoft.Windows.HyperV.VirtualInternalNetwork']$");
$oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $vswitch.ElementName)
$oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $ComputerIdentity)
$oInstance.AddProperty("$MPElement[Name='HVLib!Microsoft.Windows.HyperV.ServerRole']/ServerId$", $ComputerIdentity)
$oInstance.AddProperty("$MPElement[Name='HVLib!Microsoft.Windows.HyperV.VirtualNetwork']/NetworkId$", $vswitch.Name)
$oInstance.AddProperty("$MPElement[Name='HVLib!Microsoft.Windows.HyperV.VirtualNetwork']/NetworkName$", $vswitch.ElementName)
$oInstance.AddProperty("$MPElement[Name='HVLib!Microsoft.Windows.HyperV.VirtualNetwork']/InternalDeviceId$", $internalDeviceId)
$oInstance.AddProperty("$MPElement[Name='HVLib!Microsoft.Windows.HyperV.VirtualNetwork']/SystemName$", $internalvSwitches[0].SystemName)

$oDiscoveryData.AddInstance($oInstance);


}

}

}

if ($error -eq $null -or $error.Count -eq 0)
{
$errormsg = "Successfully discovered Virtual Network instances ";
ThrowScriptInfo -msg $errormsg
}
else
{
$errormsg = "Failed discovering Virtual Network instances ";
ThrowScriptError -msg $errormsg -errorDetails $error
$error.Clear();
}

$oDiscoveryData



</Script></ScriptBody>
<SnapIns/>
<Parameters>
<Parameter>
<Name>SourceID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>ManagedEntityID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>ComputerIdentity</Name>
<Value>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
<StrictErrorHandling>false</StrictErrorHandling>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DataSource"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>