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 <> -2145107924 and Err.Number <> 0 Then
momAPI.LogScriptEvent "Autoselect.vbs", 0, 1, "Err.Number: " & Err.Number
End If
WScript.Sleep 30000
retryCount = retryCount + 1
Else
Exit Do
End If
Loop While retryCount < 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 <> 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>