Microsoft.SystemCenter.WsusCategoryGuid.Discovery (Discovery)

Element properties:

TargetMicrosoft.SystemCenter.ManagedComputer
EnabledTrue
Frequency10800
RemotableFalse

Object Discovery Details:

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

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider System.PrivilegedMonitoringAccount

Source Code:

<Discovery ID="Microsoft.SystemCenter.WsusCategoryGuid.Discovery" Enabled="true" Target="SC!Microsoft.SystemCenter.ManagedComputer" ConfirmDelivery="false" Remotable="false" Priority="Low">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.SystemCenter.WsusCategoryGuid">
<Property PropertyID="Guid"/>
</DiscoveryClass>
<DiscoveryRelationship TypeID="Microsoft.SystemCenter.WsusCategoryGuidRelationship"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider" RunAs="System!System.PrivilegedMonitoringAccount">
<IntervalSeconds>10800</IntervalSeconds>
<SyncTime/>
<ScriptName>Microsoft.SystemCenter.AutoSelect.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Arguments>
<ScriptBody><Script>
Option Explicit
SetLocale("en-us")

Dim args
Set args = WScript.Arguments
if args.Count &lt; 3 Then
Wscript.Quit -1
End If

Dim sourceId
Dim managedEntityId
Dim targetComputer

sourceId = args(0)
managedEntityId = args(1)
targetComputer = args(2)

Dim retryCount
Dim retryLimit
Dim searchResult
Dim momAPI

retryCount = 0
retryLimit = 5

Set momAPI = CreateObject("MOM.ScriptAPI")

Do
set searchResult = DoSearch(1)
if searchResult is Nothing Then
'AutoSelect script on clients can fail on the first run (at CreateUpdateSearcher() call)
'with hr = 8024402C
'or error code 0
'we need to suppress this
'subseqent runs are good
if Err.Number &lt;&gt; -2145107924 and Err.Number &lt;&gt; 0 Then
momAPI.LogScriptEvent "Autoselect.vbs", 0, 1, "Err.Number: " &amp; Err.Number
End If
WScript.Sleep 30000
retryCount = retryCount + 1
Else
Exit Do
End If
Loop While retryCount &lt; retryLimit - 1

if searchResult is Nothing Then
set searchResult = DoSearch(1)
End If

Dim discoveryData
Dim rootCategories
Dim rootCategory
Dim index

set discoveryData = momAPI.CreateDiscoveryData(0, sourceId, managedEntityId)

If searchResult is Nothing Then
Call momAPI.Return(discoveryData)
WScript.Quit
End If


set rootCategories = searchResult.RootCategories
For index = 0 To rootCategories.Count-1
Set rootCategory = rootCategories.Item(index)
AddInstance discoveryData, rootCategory

RootCategories_Recursive discoveryData, rootCategory
Next

Call momAPI.Return(discoveryData)

Function AddInstance(discoveryData, category)
Dim instance
Set instance= discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.SystemCenter.WsusCategoryGuid']$")
Call instance.AddProperty("$MPElement[Name='Microsoft.SystemCenter.WsusCategoryGuid']/Guid$", category.CategoryID)
Call instance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetComputer)
call instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", targetComputer)
Call discoveryData.AddInstance(instance)
End Function

Function RootCategories_Recursive(discoveryData, parentCategory)
Dim childrenCategories
Dim category
Dim index

set childrenCategories = parentCategory.Children
For index = 0 To childrenCategories.Count-1
Set category = childrenCategories.Item(index)
AddInstance discoveryData, category
RootCategories_Recursive discoveryData, category
Next
End Function

Function DoSearch(canRetry)
Dim updateSession
Dim updateSearcher
Dim result

Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateUpdateSearcher()

if canRetry = 1 Then
On Error Resume Next
End If

Set result = updateSearcher.Search("Type='Software' or Type='Driver'")

if canRetry = 1 Then
If Err.Number &lt;&gt; 0 Then
Set result = Nothing
End If
On Error Goto 0
End If
set DoSearch=result
End Function
</Script></ScriptBody>
<TimeoutSeconds>3600</TimeoutSeconds>
</DataSource>
</Discovery>