Exchange 2007 CAS Connectivity Discovery Data Source
Microsoft.Exchange2007.Template.CasTX.Discovery.DS (DataSourceModuleType)
Element properties: Member Modules:
Overrideable Parameters:
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>