Exchange 2007 CAS Connectivity Discovery Data Source

Microsoft.Exchange2007.Template.CasTX.Discovery.DS (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityPublic
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

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

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Interval SecondsInterval Seconds
SyncTimestring$Config/SyncTime$Sync TimeSync Time
TimeoutSecondsint$Config/TimeoutSeconds$Timeout SecondsTimeout Seconds
TraceEnabledbool$Config/TraceEnabled$Trace EnabledTrace Enabled

Source Code:

<DataSourceModuleType ID="Microsoft.Exchange2007.Template.CasTX.Discovery.DS" Accessibility="Public" Batching="false">
<Configuration>
<xsd:element name="ActiveSyncClassGuid" type="xsd:string"/>
<xsd:element name="ImapClassGuid" type="xsd:string"/>
<xsd:element name="OwaExternalClassGuid" type="xsd:string"/>
<xsd:element name="OwaInternalClassGuid" type="xsd:string"/>
<xsd:element name="PopClassGuid" type="xsd:string"/>
<xsd:element name="WebServicesClassGuid" type="xsd:string"/>
<xsd:element name="IsActiveSync" type="xsd:string"/>
<xsd:element name="IsImap" type="xsd:string"/>
<xsd:element name="IsOwaExternal" type="xsd:string"/>
<xsd:element name="IsOwaInternal" type="xsd:string"/>
<xsd:element name="IsPop" type="xsd:string"/>
<xsd:element name="IsWebServices" type="xsd:string"/>
<xsd:element name="SourceServerClassGuid" type="xsd:string"/>
<xsd:element name="TargetGuids" type="xsd:string"/>
<xsd:element name="TargetServers" type="xsd:string"/>
<xsd:element name="IntervalSeconds" type="xsd:integer"/>
<xsd:element name="SyncTime" type="xsd:string"/>
<xsd:element name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element name="TraceEnabled" type="xsd:boolean"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
<OverrideableParameter ID="TraceEnabled" Selector="$Config/TraceEnabled$" ParameterType="bool"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime>$Config/SyncTime$</SyncTime>
<ScriptName>TemplateDiscoverCasTX</ScriptName>
<ScriptBody><Script>
param ([String] $TraceEnabled, [String] $ElementID, [String] $TargetID, [String] $ActiveSyncClassGuid, [String] $ImapClassGuid, [String] $OwaExternalClassGuid, [String] $OwaInternalClassGuid, [String] $PopClassGuid, [String] $WebServicesClassGuid, [String] $IsActiveSync, [String] $IsImap, [String] $IsOwaExternal, [String] $IsOwaInternal, [String] $IsPop, [String] $IsWebServices, [String] $SourceServerClassGuid, [String] $RoleName, [String] $PrincipleName, [String] $TargetServers)

$SCRIPT_NAME = "TemplateDiscoverCasTX"

$TestActiveSync = [Boolean]::Parse($IsActiveSync)
$TestImap = [Boolean]::Parse($IsImap)
$TestOwaExternal = [Boolean]::Parse($IsOwaExternal)
$TestOwaInternal = [Boolean]::Parse($IsOwaInternal)
$TestPop = [Boolean]::Parse($IsPop)
$TestWebServices = [Boolean]::Parse($IsWebServices)

$ErrorActionPreference = "Stop"

$TRACING_ID = 100

$EVENT_TYPE_LOG = 0
$EVENT_TYPE_ERROR = 1
$EVENT_TYPE_WARNING = 2
$EVENT_TYPE_INFORMATION = 4

$EnabledLogging = [Boolean]::Parse($TraceEnabled)

$momAPI = new-object -comObject MOM.ScriptAPI

function LogInformation([String] $Message)
{
if ($EnabledLogging)
{
$momAPI.LogScriptEvent($SCRIPT_NAME, $TRACING_ID, $EVENT_TYPE_INFORMATION, $Message)
}
}


function GetNetBiosName([String] $DnsName)
{
$netBiosName = $DnsName

$endIndex = $DnsName.IndexOf('.')

if ($endIndex -gt 0)
{
$netBiosName = $DnsName.Substring(0, $endIndex)
}

$netBiosName = $netBiosName.ToLower()

return $netBiosName
}


$ComputerKey = "$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$"
$ServerRoleKey = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.ServerRole']/RoleName$"
$SourceServerKey = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.Synthetics']/SourceServer$"
$TargetServerKey = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.Synthetics']/TargetServer$"
$DisplayNameKey = "$MPElement[Name='System!System.Entity']/DisplayName$"

$discoveryData = $momAPI.CreateDiscoveryData(0, $ElementID, $TargetID)

if ($discoveryData -eq $null)
{
Write-Warning "unable to create discovery data"
Exit
}

LogInformation("discovery data initialized")
Write-Host "discovery data initialized"

$serverRole = $discoveryData.CreateClassInstance($SourceServerClassGuid)

if ($serverRole -eq $null)
{
Write-Warning "unable to create source server role"
Exit
}

LogInformation("class instance created, populating properties")
Write-Host "class instance created, populating properties"

$serverRole.AddProperty($ComputerKey, $PrincipleName)
$serverRole.AddProperty($ServerRoleKey, $RoleName)

LogInformation("source server class properties populated")
Write-Host "source server class properties populated"

$sourceNetBios = GetNetBiosName($PrincipleName)


function CreateWatcher([String] $TransactionDisplayName, [String] $TargetDns, [String] $NewWatcherClassGuid)
{
$targetNetBios = GetNetBiosName($TargetDns)

$watcher = $discoveryData.CreateClassInstance($NewWatcherClassGuid)

if ($watcher -eq $null)
{
Write-Warning "unable to create watcher instance"
return
}

LogInformation("watcher class instance created for " + $TransactionDisplayName)
Write-Host "watcher class instance created $TransactionDisplayName"

$watcher.AddProperty($ComputerKey, $PrincipleName)
$watcher.AddProperty($SourceServerKey, $PrincipleName)
$watcher.AddProperty($TargetServerKey, $TargetDns)
$watcher.AddProperty($DisplayNameKey, $TransactionDisplayName + " (" + $sourceNetBios + " to " + $targetNetBios + ")")

LogInformation("watcher class properties populated for " + $sourceNetBios + " to " + $targetNetBios)
Write-Host "watcher class properties populated for $sourceNetBios to $targetNetBios"

$discoveryData.AddInstance($watcher)

LogInformation("watcher instance added to discovery data for " + $TargetDns)
Write-Verbose "watcher instance added to discovery data for $TargetDns"

$relationship = $discoveryData.CreateRelationshipInstance($RelationshipType)

if ($relationship -eq $null)
{
Write-Warning "unable to create relationship instance"
return
}

LogInformation("relationship instance created")
Write-Host "relationship instance created"

$relationship.Source = $serverRole
$relationship.Target = $watcher

LogInformation("relationship properties populated")
Write-Host "relationship properties populated"

$discoveryData.AddInstance($relationship)

LogInformation("relationship instance added to discovery data")
Write-Verbose "relationship instance added to discovery data"

$relationship = $null
$watcher = $null
}


$TargetsArray = $TargetServers.Split(';')

foreach ($TargetDns in $TargetsArray)
{
if ($TargetDns -eq $null)
{
continue
}

if ($TestActiveSync)
{
LogInformation("creating Active Sync Watcher")
Write-Host "creating Active Sync Watcher"

$RelationshipType = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.ServerRole.Cas.Contains.CasTX.ActiveSync']$"

CreateWatcher "ActiveSync Connectivity" $TargetDns $ActiveSyncClassGuid

LogInformation("created Active Sync Watcher")
Write-Host "created Active Sync Watcher"
}
if ($TestImap)
{
LogInformation("creating Imap Watcher")
Write-Host "creating Imap Watcher"

$RelationshipType = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.ServerRole.Cas.Contains.CasTX.Imap']$"

CreateWatcher "IMAP Connectivity" $TargetDns $ImapClassGuid

LogInformation("created Imap Watcher")
Write-Host "created Imap Watcher"
}
if ($TestOwaExternal)
{
LogInformation("creating Owa External Watcher")
Write-Host "creating Owa External Watcher"

$RelationshipType = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.ServerRole.Cas.Contains.CasTX.Owa']$"

CreateWatcher "OWA External Connectivity" $TargetDns $OwaExternalClassGuid

LogInformation("created Owa External Watcher")
Write-Host "created Owa External Watcher"
}
if ($TestOwaInternal)
{
LogInformation("creating Owa Internal Watcher")
Write-Host "creating Owa Internal Watcher"

$RelationshipType = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.ServerRole.Cas.Contains.CasTX.Owa']$"

CreateWatcher "OWA Internal Connectivity" $TargetDns $OwaInternalClassGuid

LogInformation("created Owa Internal Watcher")
Write-Host "created Owa Internal Watcher"
}
if ($TestPop)
{
LogInformation("creating Pop3 Watcher")
Write-Host "creating Pop3 Watcher"

$RelationshipType = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.ServerRole.Cas.Contains.CasTX.Pop3']$"

CreateWatcher "POP3 Connectivity" $TargetDns $PopClassGuid

LogInformation("created Pop3 Watcher")
Write-Host "created Pop3 Watcher"
}
if ($TestWebServices)
{
LogInformation("creating Web Services Watcher")
Write-Host "creating Web Services Watcher"

$RelationshipType = "$MPElement[Name='ExLibrary!Microsoft.Exchange2007.ServerRole.Cas.Contains.CasTX.WebServices']$"

CreateWatcher "WebServices Connectivity" $TargetDns $WebServicesClassGuid

LogInformation("created Web Services Watcher")
Write-Host "created Web Services Watcher"
}
}

$discoveryData

LogInformation("discovery data returned")
Write-Host "discovery data returned"

$serverRole = $null

</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>TraceEnabled</Name>
<Value>$Config/TraceEnabled$</Value>
</Parameter>
<Parameter>
<Name>ElementID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>TargetID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>ActiveSyncClassGuid</Name>
<Value>$Config/ActiveSyncClassGuid$</Value>
</Parameter>
<Parameter>
<Name>ImapClassGuid</Name>
<Value>$Config/ImapClassGuid$</Value>
</Parameter>
<Parameter>
<Name>OwaExternalClassGuid</Name>
<Value>$Config/OwaExternalClassGuid$</Value>
</Parameter>
<Parameter>
<Name>OwaInternalClassGuid</Name>
<Value>$Config/OwaInternalClassGuid$</Value>
</Parameter>
<Parameter>
<Name>PopClassGuid</Name>
<Value>$Config/PopClassGuid$</Value>
</Parameter>
<Parameter>
<Name>WebServicesClassGuid</Name>
<Value>$Config/WebServicesClassGuid$</Value>
</Parameter>
<Parameter>
<Name>IsActiveSync</Name>
<Value>$Config/IsActiveSync$</Value>
</Parameter>
<Parameter>
<Name>IsImap</Name>
<Value>$Config/IsImap$</Value>
</Parameter>
<Parameter>
<Name>IsOwaExternal</Name>
<Value>$Config/IsOwaExternal$</Value>
</Parameter>
<Parameter>
<Name>IsOwaInternal</Name>
<Value>$Config/IsOwaInternal$</Value>
</Parameter>
<Parameter>
<Name>IsPop</Name>
<Value>$Config/IsPop$</Value>
</Parameter>
<Parameter>
<Name>IsWebServices</Name>
<Value>$Config/IsWebServices$</Value>
</Parameter>
<Parameter>
<Name>SourceServerClassGuid</Name>
<Value>$Config/SourceServerClassGuid$</Value>
</Parameter>
<Parameter>
<Name>RoleName</Name>
<Value>$Target/Property[Type='ExLibrary!Microsoft.Exchange2007.ServerRole']/RoleName$</Value>
</Parameter>
<Parameter>
<Name>PrincipleName</Name>
<Value>$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>TargetServers</Name>
<Value>$Config/TargetServers$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>