terminate processes in a range





2
Date Submitted Thu. Mar. 2nd, 2006 10:23 AM
Revision 1 of 1
Syntax Master dannyboy
Tags KILL | PROCESS | VBSCRIPT
Comments 0 comments
terminate a named process on computers in a given IP address range

Option Explicit
On Error Resume Next
Dim colProcesses
Dim refProcess
Dim refWMI
Dim strMoniker
Dim strQuery
Dim numLow
Dim numHigh
Dim i

'check that we have the right number of command-line args
'
if not, then quit with a usage message
If WScript.Arguments.Count <> 3 Then
        WScript.Echo "Usage: killitIP.vbs <process> <lower IP> <upper IP>"
        WScript.Quit
End If

'Convert the second and third command-line argument into numbers
'
using IPToNum() and store their results
numLow = IPToNUm(WScript.Arguments(1))
numHigh = IPToNUm(WScript.Arguments(2))

'check that numLow and numHigh are valid (IPToNum() returns -1 if not)
If numLow < 0 Or numHigh < 0 Then
        WScript.Echo "Incorrect IP address range"
        WScript.Quit
End If

'
check that numLow is smaller than numHigh!
If numLow > numHigh Then
        WScript.Echo "The second IP address must be higher than the first."
        WScript.Quit
End If

'Build query string based on process name provided as first cmd-line arg
strQuery = "SELECT * FROM Win32_Process WHERE Name='
" & WScript.Arguments(0) & "'"

'
loop through address range
For i = numLow To numHigh
        Err.Clear()
        'try to connect to machine with given address NumToIP() converts the counter value back to a textual address
        strMoniker = "winmgmts:\\" & NumToIP(i)
        Set refWMI = GetObject(strMoniker)
        If Err.Number <> 0 Then
                WScript.Echo "Failed to connect to " & NumToIP(i)
        Else
                '
get a collection of Win32_Process objects
                Set colProcesses = refWMI.ExecQuery(strQuery)
                If colProcesses.Count=0 Then
                        WScript.Echo WScript.Arguments(0) & " - Not found on " & NumToIP(i)
                Else
                        'there are some matching process, so loop through and kill
                        For Each refProcess in colProcesses
                                If refProcess.Terminate()=0 Then
                                        WScript.Echo "(PID " & refProcess.Handle & ") " & refProcess.Name & " Terminated on - " & NumToIP(i)
                                Else
                                        WScript.Echo "Unable to terminate - " & refProcess.Name & " on " & NumToIP(i)
                                End If
                        Next
                End If
        End If
        Set colProcesses = Nothing
        Set refWMI = Nothing
Next

'
IPToNum() function - turns a textual IP address into a 32-bit number
Function IPToNum(strIP)
        Dim numOctetsArray
        Dim i
        numOctetsArray = Split(strIP,".")
        'sanity checks
        If UBound(numOctetsArray) <> 3 Then
                '
oops = wrong number of octets
                IPToNum = -1
                Exit Function
        End If
        For i = 0 to 3
                If Not IsNumeric(numOctetsArray(i)) Then
                        'oops - not an IP address
                        IPToNum = -2
                        Exit Function
                End If
                If numOctetsArray(i) > 254 Then
                        '
oops - octet out of range
                        IPToNum = -3
                        Exit Function
                End If
        Next
        'now compile a number
        IPToNum = numOctetsArray(0) * (2^24)
        IPToNum = IPToNum + numOctetsArray(1) * (2^16)
        IPToNum = IPToNum + numOctetsArray(2) * (2^8)
        IPToNum = IPToNum + numOctetsArray(3)
End Function

'
NumToIP() function - turns a 32-bit number into an IP address
Function NumToIP(numNum)
        Dim numOctetsArray(4)
        Dim param 'simulate passbyval
        Dim i
        param = numNum
        '
don't bother with sanity checks here because we are always passing something created by IPToNum
        numOctetsArray(0) = Int(param / (2^24))
        param = param - (numOctetsArray(0) * (2^24))
        numOctetsArray(1) = Int(param / (2^16))
        param = param - (numOctetsArray(1) * (2^16))
        numOctetsArray(2) = Int(param / (2^8))
        numOctetsArray(3) = param - (numOctetsArray(2) * (2^8))
        NumToIP = numOctetsArray(0) & "." & numOctetsArray(1) & "." & numOctetsArray(2) & "." & numOctetsArray(3)
End Function

 

Comments

There are currently no comments for this snippet.

Voting