DPM data source discovery (D-T)

Microsoft.SystemCenter.DataProtectionManager.2011.Discovery.DToTDatasourceDiscovery (Discovery)

DPM data source discovery (Disk-to-Tape).

Element properties:

TargetMicrosoft.SystemCenter.DataProtectionManager.2011.Library.ProtectionGroup
EnabledTrue
Frequency43200
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
Discovered relationships and their attribuets:

Member Modules:

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

Source Code:

<Discovery ID="Microsoft.SystemCenter.DataProtectionManager.2011.Discovery.DToTDatasourceDiscovery" Enabled="true" Target="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ProtectionGroup" ConfirmDelivery="true" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ApplicationDatasource"/>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.FileSystemDatasource"/>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ClientDatasource"/>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.SQLDatasource"/>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.SharePointDatasource"/>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ExchangeDatasource"/>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.HyperVDatasource"/>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.SystemStateDatasource"/>
<DiscoveryClass TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.VirtualServerDatasource"/>
<DiscoveryRelationship TypeID="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.PGHostsDatasource"/>
</DiscoveryTypes>
<DataSource ID="DtoTDatasourceDiscovery" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>43200</IntervalSeconds>
<SyncTime>06:00</SyncTime>
<ScriptName>DatasourceDtoTDiscovery.ps1</ScriptName>
<ScriptBody><Script>#Read input parameters
param($sourceType, $sourceId, $managedEntityId, [string] $dpmServerName, $pgId)

function DisplayError()
{
param($description, $severity, $errorCode, $exceptionString, $resolutionString)

$evt = new-object System.Diagnostics.EventLog("DPM Alerts");
$evt.Source = "DPM-EM";
$eventSeverity = [System.Diagnostics.EventLogEntryType]::Information;

#severity = 0 is info and severity = 1 is warning
if($severity -eq 1)
{
$eventSeverity = [System.Diagnostics.EventLogEntryType]::Warning;
}

$errString = new-object system.text.stringBuilder
$errString.AppendLine($description)

if($exceptionString -ne $null)
{
$errString.AppendLine()
$errString.AppendLine("Problem: " + $exceptionString)
}

if($resolutionString -ne $null)
{
$errString.AppendLine()
$errString.AppendLine("Resolution: " + $resolutionString)
}

$evt.WriteEntry($errString.ToString(), $eventSeverity, $errorCode);
}


#######################################################################################
## This script discovers the DSes for D-T PG
#######################################################################################

$desc = "D-T DS discovery started event. PgId = " + $pgId

DisplayError $desc 0 114 $null $null

# Load DPM snapin
$dpmBinPath = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft Data Protection Manager\Setup" "UIInstallPath").UIInstallPath
. "$dpmBinPath\GlobalFunctions.ps1"
LoadDPMSnapin

#Create and Instantinate SCOM discovery objects
$api = New-Object -ComObject 'MOM.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData($sourceType, $sourceId, $managedEntityId)
$dpmServer = $null


try
{
$guid_pgId = [GUID]$pgId

#Connect to DPM server
$err = $($dpmServer = Connect-DPMServer -DPMServerName $dpmServerName) 2&gt;&amp;1
if (!$dpmServer)
{
$desc = "D-T DS discovery exited event as could not connect to dpm server = " + $dpmServerName
if($err)
{
DisplayError $desc 1 115 $err.Exception.ToString() $err.Exception.Error.Resolution.ToString()
}
else
{
DisplayError $desc 1 115 $null $null
}

exit 1
}



#Get D-T PG object for which we want to discover DSes
$err = $($pg = Get-ProtectionGroup -DPMServerName $dpmServerName | Where{($_.PGProtectionType -ieq "DiskToTape" -or $_.PGProtectionType -ieq "DiskToTapeToTape") -and $_.ProtectionGroupId -eq $guid_pgId}) 2&gt;&amp;1

if($err)
{
$desc = "Unable to retrieve PG list in D-T datasource discovery"
DisplayError $desc 1 115 $err.Exception.ToString() $err.Exception.Error.Resolution.ToString()
}

if($pg)
{

#Get all DSes for the PG
$err = $($dsList = @(Get-Datasource -ProtectionGroup $pg)) 2&gt;&amp;1

if($err)
{
$desc = "Unable to retrieve datasource list in D-T datasource discovery"
DisplayError $desc 1 115 $err.Exception.ToString() $err.Exception.Error.Resolution.ToString()
}

if($dsList)
{
$dsList = $dsList | Sort-Object $_.Name
}

if($dsList)
{
foreach($ds in $dsList)
{
$dsInstance = $null;
$genericDatasource = $false;

#FS
if($ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::FileSystem)
{
$dsInstance = $discoveryData.CreateClassInstance('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.FileSystemDatasource"]$')
}
#SQL (MSDE or Yucon)
elseif($ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::MSDE -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::SQL)
{
$sqlDs = $ds -as [Microsoft.Internal.EnterpriseStorage.Dls.UI.ObjectModel.SQL.SQLDataSource];
$dsInstance = $discoveryData.CreateClassInstance("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.SQLDatasource']$");
$dsInstance.AddProperty('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.SQLDatasource"]/SQLInstance$', $sqlDs.Instance);
}
#Exchange/E14
elseif($ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::Exchange -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::E14)
{
$dsInstance = $discoveryData.CreateClassInstance('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ExchangeDatasource"]$');
}
#sharepoint/sharepoint14/SPSearch/Office search/Virtual SPSearch/Virtual SSP
elseif($ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::Sharepoint -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::Sharepoint4 -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::SpSearch -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::OfficeSearch -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::VirtualSPSearch -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::VirtualSSP)
{
$dsInstance = $discoveryData.CreateClassInstance('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.SharePointDatasource"]$');
}
#disconnected client
elseif($ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::DisconnectedClient)
{
$dsInstance = $discoveryData.CreateClassInstance('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ClientDatasource"]$');
}
#SysteState
elseif($ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::SystemState)
{
$dsInstance = $discoveryData.CreateClassInstance('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.SystemStateDatasource"]$');
}
#HyperV
elseif($ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::HyperVServer)
{
$dsInstance = $discoveryData.CreateClassInstance('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.HyperVDatasource"]$');
}
elseif($ds -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::VirtualServer)
{
$dsInstance = $discoveryData.CreateClassInstance('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.VirtualServerDatasource"]$');
}
else #all remaining are the Generic DSes
{
$dsInstance = $discoveryData.CreateClassInstance('$MPElement[Name="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ApplicationDatasource"]$');
$genericDatasource = $true;
}

#set other properties of ds
$dsInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $dpmServerName)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DPMSeed']/DPMServerName$", $dpmServerName)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DPMServer']/DPMServerName$", $dpmServerName)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ProtectionGroup']/DPMObjectID$", $ds.ProtectionGroupId.ToString())

$dsName = $null

if($ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::FileSystem -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::SystemState -or
$ds.Type.Id -eq [Microsoft.Internal.EnterpriseStorage.Dls.EngineUICommon.VssWriterId]::HyperVServer -or
$genericDatasource -eq $true)
{
$dsName = $ds.DisplayPath + "(" + $ds.ProductionServerName + ")"
}
else
{
$dsName = $ds.DisplayPath
}
$dsInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $dsName)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DataSource']/DPMServerName$", $dpmServerName)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DataSource']/PGName$", $ds.ProtectionGroupName)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DataSource']/PSName$", $ds.ProductionServerName)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DataSource']/DPMObjectID$", $ds.DatasourceId.ToString())
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DataSource']/IsSecondaryProtected$", $ds.IsDPMDatasource)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DataSource']/DatasourceType$", $ds.Type.Name)
$dsInstance.AddProperty("$MPElement[Name='SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DataSource']/SourceDPM$", $ds.SourceDPMServer)
$discoveryData.AddInstance($dsInstance)

Remove-Variable dsInstance -Confirm:$false

}
}
}

}
catch
{
$desc = "Exception in D-T datasource discovery"
DisplayError $desc 1 115 $_.ToString() $null
throw $_
}

#Make OM call to publish alerts.
try
{
if($dpmServer -ne $null)
{
$dpmServer.PublishAlertsDelayed();
}
}
catch
{
$desc = "Exception in D-T datasource discovery while publishing alerts"
DisplayError $desc 1 115 $_.ToString() $null
}

$desc = "D-T DS discovery completed event. PgId = " + $pgId
DisplayError $desc 0 115 $null $null

#return discovery data
$discoveryData

#Cleanup Variables
Remove-Variable sourceType -Confirm:$false
Remove-Variable sourceId -Confirm:$false
Remove-Variable managedEntityId -Confirm:$false
Remove-Variable discoveryData -Confirm:$false
Remove-Variable api -Confirm:$false
</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>SourceType</Name>
<Value>0</Value>
</Parameter>
<Parameter>
<Name>SourceId</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>ManagedEntityId</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>DPMServerName</Name>
<Value>$Target/Property[Type="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ProtectionGroup"]/DPMServerName$</Value>
</Parameter>
<Parameter>
<Name>PgId</Name>
<Value>$Target/Property[Type="SCDPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.ProtectionGroup"]/DPMObjectID$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>7200</TimeoutSeconds>
</DataSource>
</Discovery>