Listing 4: MultiThreader.vbs ' ******* BEGIN CALLOUT A ******* Option Explicit On Error Resume Next Const bWaitForCompletion = False Const Hide_Window = 0 Dim strScriptName Dim objArgs Dim objRootDSE Dim objShell Dim objCommand Dim objConnection Dim strDNSDomain Dim strQuery Dim objRecordSet Dim intCount Dim strCommand Dim y ' ******* END CALLOUT A ******* ' ******* BEGIN CALLOUT B ******* Set objArgs = WScript.Arguments strScriptName = objArgs.Item(0) ' ******* END CALLOUT B ******* ' ******* BEGIN CALLOUT C ******* Set objCommand = CreateObject("ADODB.Command") Set objConnection = CreateObject("ADODB.Connection") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" objCommand.ActiveConnection = objConnection strQuery = ";" & _ "(&(objectCategory=computer)(operatingSystem=windows*server*));" _ & "name;subtree" objCommand.CommandText = strQuery Set objRecordSet = objCommand.Execute ' ******* END CALLOUT C ******* ' ******* BEGIN CALLOUT D ******* ' The intCount variable specifies the number of servers to batch in a ' single thread. You can customize this number as needed. intCount = 50 strCommand = strScriptName y = 1 Do Until objRecordSet.EOF strCommand = strCommand & " " & objRecordSet.Fields("Name") If y = intCount Then objShell.run "cscript " & strCommand, Hide_Window, bWaitForCompletion strCommand = strScriptName y = 1 Else y = y + 1 End If objRecordSet.MoveNext Loop ' ******* END CALLOUT D ******* If strCommand <> strScriptName Then objShell.run "cscript " & strCommand, Hide_Window, bWaitForCompletion End If