WAP Component Endpoint URL Discovery

WindowsAzurePack.Discovery.AdminAPI.SiteAddress.PowerShell (Discovery)

Discovers the Endpoints or Site addresses for all core WAP components

Element properties:

TargetWindowsAzurePack.AdminAPI
EnabledTrue
Frequency14400
RemotableFalse

Member Modules:

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

Source Code:

<Discovery ID="WindowsAzurePack.Discovery.AdminAPI.SiteAddress.PowerShell" Target="WindowsAzurePack.AdminAPI" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes/>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<!--IntervalSeconds specifies how often we will run the discovery. 14400 secs = 4 hrs-->
<IntervalSeconds>14400</IntervalSeconds>
<!--SyncTime specifies the minutes after the hour to synchronize execution of the discovery.-->
<SyncTime/>
<!--ScriptName specifies the name of the script.-->
<ScriptName>WAP.DiscoverSiteInfo.ps1</ScriptName>
<!--ScriptBody is the text of the script. In this case, a variable is used to specify the script file in the VSAE project-->
<ScriptBody><Script># Copyright (c) Microsoft Corporation. All rights reserved.

param([string]$sourceId, [string]$managedEntityId)

Import-Module -Name MgmtSvcConfig
$api = New-Object -comObject 'MOM.ScriptAPI'

try
{

$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)

Get-MgmtSvcNamespace | ForEach-Object {

# The site address property has a default we need to preserve
# if calls to get a new value fail. So we only set a new value if we
# are sure there is an actual value; otherwise, we leave it along with
# the default value
$eventID = 102 # Event code unique in Operations Manager
$errorID = 1 # 1 means Error
$instance = $null
$siteAddress = $null
$computerName = $null
$computerName = (Get-MgmtSvcEndpoint -Namespace $_ )[0].Source
$siteAddress = (Get-MgmtSvcEndpoint -Namespace $_ -Name "FederationMetadata").Address
if (!$siteAddress)
{
$siteAddress = (Get-MgmtSvcEndpoint -Namespace $_)[0].Address
}

switch($_)
{
"AdminSite"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.AdminSite']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.AdminSite']/SiteAddress$", $siteAddress)
}
"TenantSite"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.TenantSite']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.TenantSite']/SiteAddress$", $siteAddress)
}
"AdminAPI"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.AdminAPI']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.AdminAPI']/SiteAddress$", $siteAddress)
}
"AuthSite"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.AuthSite']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.AuthSite']/SiteAddress$", $siteAddress)
}
"ConfigSite"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.ConfigSite']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.ConfigSite']/SiteAddress$", $siteAddress)
}
"TenantAPI"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.TenantAPI']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.TenantAPI']/SiteAddress$", $siteAddress)
}
"TenantPublicAPI"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.TenantPublicAPI']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.TenantPublicAPI']/SiteAddress$", $siteAddress)
}
"UsageService"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.Usage']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.Usage']/SiteAddress$", $siteAddress)
}
"UsageCollector"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.UsageCollector']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.UsageCollector']/SiteAddress$", $siteAddress)
}
"WebAppGallery"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.WebAppGallery']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.WebAppGallery']/SiteAddress$", $siteAddress)
}
"WindowsAuthSite"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.WindowsAuthSite']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.WindowsAuthSite']/SiteAddress$", $siteAddress)
}
"SQLServer"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.ResourceProvider.SqlServers']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.ResourceProvider.SqlServers']/SiteAddress$", $siteAddress)
}
"MySQL"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.ResourceProvider.MySqlServers']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.ResourceProvider.MySqlServers']/SiteAddress$", $siteAddress)
}
"Monitoring"
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='WindowsAzurePack.Monitoring']$")
$instance.AddProperty("$MPElement[Name='WindowsAzurePack.Monitoring']/SiteAddress$", $siteAddress)
}
default
{
# report error in event log
$api.LogScriptEvent("WAP.DiscoverSiteInfo.ps1",$eventID,$errorID,"Windows Azure Pack Management Pack Site Address script received an invalid Namespace value: $_. Default SiteAddress value will be used.")
}
}
if($instance)
{
$instance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
$discoveryData.AddInstance($instance)
}
}

$discoveryData
}
catch
{
$eventID = 103
$ErrorMessage = $_.Exception.Message
$api.LogScriptEvent("WAP.DiscoverSiteInfo.ps1",$eventID,$errorID,"Script failed to execute: $sourceId, $managedEntityId, $computerName, $siteAddress. $ErrorMessage")
}
</Script></ScriptBody>
<!--Parameters for the script.-->
<Parameters>
<Parameter>
<Name>sourceID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>managedEntityID</Name>
<Value>$Target/Id$</Value>
<!--<Value>$MPElement[Name="WindowsAzurePack.AdminAPI"]$</Value>-->
</Parameter>
<!--<Parameter>
<Name>className</Name>
<Value>"WindowsAzurePack.AdminAPI"</Value>
</Parameter>-->
<!--<Parameter>
<Name>WAPService</Name>
<Value>AdminAPI</Value>
</Parameter>
<Parameter>
<Name>computerName</Name>
<Value>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Parameter>-->
</Parameters>
<!--TimeoutSeconds is the seconds that the script must be running before it is automatically ended.-->
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>