Windows Media Services 9 Cache/Proxy Publishing Point Discovery

Custom.WMS.9.PPCacheProxy.Discovery (Discovery)

Uses a script to discover cache/proxy publishing points

Element properties:

TargetCustom.WMS.9.ReverseProxy.Role
EnabledTrue
Frequency3943
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DScriptL DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Default

Source Code:

<Discovery ID="Custom.WMS.9.PPCacheProxy.Discovery" Enabled="true" Target="Custom.WMS.9.ReverseProxy.Role" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<!--
<DiscoveryClass TypeID="Custom.WMS.9.PP.Broadcast">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="Custom.WMS.x.Role" PropertyID="ID" />
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPName"/>
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPPath"/>
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPType"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Custom.WMS.9.PP.OnDemand">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="Custom.WMS.x.Role" PropertyID="ID" />
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPName"/>
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPPath"/>
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPType"/>
</DiscoveryClass>
-->
<DiscoveryClass TypeID="Custom.WMS.9.PP.CacheProxy">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="Custom.WMS.x.Role" PropertyID="ID"/>
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPName"/>
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPPath"/>
<Property TypeID="Custom.WMS.x.PP" PropertyID="PPType"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DScriptL" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>3943</IntervalSeconds>
<SyncTime/>
<ScriptName>Custom.Windows.WMS.Publishing.Point.Discovery.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$ $Target/Property[Type="Custom.WMS.x.Role"]/ID$ true</Arguments>
<ScriptBody><Script><![CDATA['*************************************************************************
' Script Name - Custom.Windows.WMS.Publishing.Point.Discovery.vbs
'
' Purpose - Discovers Windows Media Services Publishing Points for OpsMgr 2007
'
' Assumptions - based on WMS V9 SDK documentation
' depending on the type it creates instances in one of the following three classes:
' - Custom.WMS.9.PP.Broadcast
' - Custom.WMS.9.PP.OnDemand
' - Custom.WMS.9.PP.CacheProxy
'
' Parameters 1 SourceID
' 2 ManagedEntity
' 3 TargetComputer
' 4 WMS ID
' 5 boolean - discover cache/proxy PPs
'
' Date - 02.10.2007 Raphael Burri / [email protected]
'*************************************************************************
Option Explicit

Const WMS_PUBLISHING_POINT_ERROR = 1
Const WMS_PUBLISHING_POINT_ERROR_CRITICAL = 2
Const WMS_PUBLISHING_POINT_RUNNING = 0

Const WMS_PUBLISHING_POINT_TYPE_ON_DEMAND = 1
Const WMS_PUBLISHING_POINT_TYPE_BROADCAST = 2
Const WMS_PUBLISHING_POINT_TYPE_CACHE_PROXY_ON_DEMAND = 3
Const WMS_PUBLISHING_POINT_TYPE_CACHE_PROXY_BROADCAST = 4

Dim objArgs, objAPI, objWMSDefGroup
Dim SourceID, ManagedEntityId, TargetComputer, WMSID, DiscoverCacheProxy



'get the parameters from the management pack
Set objArgs = WScript.Arguments
If objArgs.Count < 5 Then
WScript.Quit -1
End If
SourceID = objArgs(0)
ManagedEntityId = objArgs(1)
TargetComputer = objArgs(2)
WMSID = objArgs(3)
DiscoverCacheProxy = CBool(objArgs(4))


Set objAPI = CreateObject("MOM.ScriptAPI")

DiscoverWMSPP SourceID, ManagedEntityId, WMSID, FetchPublishingPoints, objWMSDefGroup, DiscoverCacheProxy

Function FetchPublishingPoints
On Error Resume Next
Dim objWMSrv, objPubPoints, objPubPoint
Dim iPP
Dim aPubPoints

Set objWMSrv = CreateObject("WMSServer.server",TargetComputer)
Set objPubPoints = objWMSrv.PublishingPoints

'get the type and the name for each publishing point that exists
ReDim aPubPoints(objPubPoints.Count, 3)
For iPP = 0 To objPubPoints.Count - 1
Set objPubPoint = objPubPoints.Item(iPP)
Select Case objPubPoint.Name
Case "/"
aPubPoints(iPP, 0) = "/"
Case Else
aPubPoints(iPP, 0) = objPubPoint.Name
End Select

Select Case objPubPoint.Type
Case WMS_PUBLISHING_POINT_TYPE_ON_DEMAND
aPubPoints(iPP,1) = objPubPoint.Path
aPubPoints(iPP,2) = "on demand"
Case WMS_PUBLISHING_POINT_TYPE_BROADCAST
aPubPoints(iPP,1) = objPubPoint.Path
aPubPoints(iPP,2) = "broadcast"
Case WMS_PUBLISHING_POINT_TYPE_CACHE_PROXY_ON_DEMAND
aPubPoints(iPP,1) = "n/a"
aPubPoints(iPP,2) = "on demand (cache proxy)"
Case WMS_PUBLISHING_POINT_TYPE_CACHE_PROXY_BROADCAST
aPubPoints(iPP,1) = "n/a"
aPubPoints(iPP,2) = "broadcast (cache proxy)"
End Select


Next
On Error Goto 0
'occasionally the PPs are deleted while discovery is running. In that case the error should be ignored.
Err.Clear

FetchPublishingPoints = aPubPoints

End Function


Function DiscoverWMSPP (SourceId, ManagedEntityId, WMSID, ByVal aDiscoverData, ByVal objWMSDefGroup, DiscoverCacheProxy)

Dim objDiscoveryData, objRelCon, objInst
Dim iPubPoints

If UBound(aDiscoverData) > 0 Then
Set objDiscoveryData = objAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
For iPubPoints = 0 To UBound(aDiscoverData) - 1
Select Case aDiscoverData(iPubPoints, 2)
Case "broadcast"
If DiscoverCacheProxy = vbFalse Then
Set objInst = objDiscoveryData.CreateClassInstance("$MPElement[Name='Custom.WMS.9.PP.Broadcast']$")
Call objInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.Role']/ID$", WMSID)
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPName$", aDiscoverData(iPubPoints,0))
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPPath$", aDiscoverData(iPubPoints,1))
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPType$", aDiscoverData(iPubPoints,2))
Call objInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "WMS PP " + aDiscoverData(iPubPoints, 0))
Call objDiscoveryData.AddInstance(objInst)
End If



Case "on demand"
If DiscoverCacheProxy = vbFalse Then
Set objInst = objDiscoveryData.CreateClassInstance("$MPElement[Name='Custom.WMS.9.PP.OnDemand']$")
Call objInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.Role']/ID$", WMSID)
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPName$", aDiscoverData(iPubPoints,0))
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPPath$", aDiscoverData(iPubPoints,1))
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPType$", aDiscoverData(iPubPoints,2))
Call objInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "WMS PP " + aDiscoverData(iPubPoints,0))
Call objDiscoveryData.AddInstance(objInst)
End If

Case Else
If DiscoverCacheProxy = vbTrue Then
Set objInst = objDiscoveryData.CreateClassInstance("$MPElement[Name='Custom.WMS.9.PP.CacheProxy']$")
Call objInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.Role']/ID$", WMSID)
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPName$", aDiscoverData(iPubPoints,0))
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPPath$", aDiscoverData(iPubPoints,1))
Call objInst.AddProperty("$MPElement[Name='Custom.WMS.x.PP']/PPType$", aDiscoverData(iPubPoints,2))
Call objInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "WMS PP " + aDiscoverData(iPubPoints,0))
Call objDiscoveryData.AddInstance(objInst)
End If
End Select
Next

Call objAPI.Return(objDiscoveryData)

Set objInst = Nothing
Set objDiscoveryData = Nothing

Else
'Call objAPI.LogScriptEvent("Custom.Windows.WMS.Publishing.Point.Discovery.vbs", 9002, 4, "The service discovery script has not found any WMS Publishing Point and is closing without writing discovery data.")
WScript.Quit 0
End If

End Function]]></Script></ScriptBody>
<TimeoutSeconds>30</TimeoutSeconds>
</DataSource>
</Discovery>