Hyper-V MPE 2012 Virtual Machine Replica Script Discovery

HyperVMPE2012.VirtualMachineReplica.ScriptDiscovery (Discovery)

Element properties:

TargetMicrosoft.Windows.HyperV.2012.ServerRole
EnabledTrue
Frequency3600
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
  • HyperVMPE2012.VirtualMachineReplica
    • ReplicationState
    • ReplicationHealth
    • ReplicationMode
    • PrimaryHostSystem
    • RecoveryHostSystem
    • VirtualMachineId
    • VirtualMachineName
    • ServerName
    • ComputerName
    • DisplayName

Member Modules:

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

Source Code:

<Discovery ID="HyperVMPE2012.VirtualMachineReplica.ScriptDiscovery" Enabled="true" Target="MSWinHV2012Dis!Microsoft.Windows.HyperV.2012.ServerRole" ConfirmDelivery="true" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="HyperVMPE2012.VirtualMachineReplica">
<Property TypeID="HyperVMPE2012.VirtualMachineReplica" PropertyID="ReplicationState"/>
<Property TypeID="HyperVMPE2012.VirtualMachineReplica" PropertyID="ReplicationHealth"/>
<Property TypeID="HyperVMPE2012.VirtualMachineReplica" PropertyID="ReplicationMode"/>
<Property TypeID="HyperVMPE2012.VirtualMachineReplica" PropertyID="PrimaryHostSystem"/>
<Property TypeID="HyperVMPE2012.VirtualMachineReplica" PropertyID="RecoveryHostSystem"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine" PropertyID="VirtualMachineId"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine" PropertyID="VirtualMachineName"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine" PropertyID="ServerName"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine" PropertyID="ComputerName"/>
<Property TypeID="SLib!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="ScriptPS" TypeID="MSWinLib!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>3600</IntervalSeconds>
<SyncTime/>
<ScriptName>VirtualMachineReplicaDiscoveryPS.ps1</ScriptName>
<ScriptBody><Script>
param($sourceId,$managedEntityId,$TargetComputer)

$api = New-Object -comObject 'MOM.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)

$Replicas = Get-VMReplication

foreach ($Replica in $Replicas)
{
$oInst = $discoveryData.CreateClassInstance("$MPElement[Name='HyperVMPE2012.VirtualMachineReplica']$")

$oInst.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine']/VirtualMachineId$", $Replica.VMId.ToString())
$oInst.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.ServerRole']/ServerId$", $TargetComputer)
$oInst.AddProperty("$MPElement[Name='MSWinLib!Microsoft.Windows.Computer']/PrincipalName$", $TargetComputer)

#Properties (optional)
$oInst.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine']/VirtualMachineName$", $Replica.Name)
$oInst.AddProperty("$MPElement[Name='HyperVMPE2012.VirtualMachineReplica']/ReplicationMode$", $Replica.Mode.ToString())
$oInst.AddProperty("$MPElement[Name='HyperVMPE2012.VirtualMachineReplica']/ReplicationHealth$", $Replica.Health.ToString())

$oInst.AddProperty("$MPElement[Name='HyperVMPE2012.VirtualMachineReplica']/ReplicationState$", $Replica.State.ToString())
$api.LogScriptEvent("Replica State -- ",2222,0, $Replica.State.ToString())
$oInst.AddProperty("$MPElement[Name='HyperVMPE2012.VirtualMachineReplica']/PrimaryHostSystem$", $Replica.PrimaryServerName)
$oInst.AddProperty("$MPElement[Name='HyperVMPE2012.VirtualMachineReplica']/RecoveryHostSystem$", $Replica.ReplicaServerName)
$oInst.AddProperty("$MPElement[Name='SLib!System.Entity']/DisplayName$", $Replica.Name)

$discoveryData.AddInstance($oInst)

}

$discoveryData

</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>sourceID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>managedEntityID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>TargetComputer</Name>
<Value>$Target/Host/Property[Type="MSWinLib!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>60</TimeoutSeconds>
</DataSource>
</Discovery>