|
Prev: VarType constant 10 -- vbError
Next: Terminate Process Problem with Option Explicit Breaks functionalit
From: Jeff Lynch on 6 Jul 2008 00:40 Been busy cleaning up some code and i noticed that one of my scripts wasn't using Option Explicit. Now i am no guru but i figure it's always a better option to use that setting. Anyway here is the Scripts Intention and the problem will follow: Script Purpose: Kill Hung service whether local or remote. Problem: When I enable 'Use Option Explicit the script breaks and will no longer kill a running service on the local computer. Any advise on why option explicit breaks the code would be appreciated Script: 'Option Explicit 'Dim strServerName,strComputerName,strServiceName,strWQL KillService "usa-jlynch","Google Updater Service" '####################################################################### ####### ' KillService -Kills service by matching Service to ProcessID to then Terminate ' 'example: ' KillProcess "usa-jlynch","Ad-Aware 2007 Service" ' **Problem with Option Explicit, if turned on Local Services will not be killed '####################################################################### ####### Function KillService(strServername,strServiceName) Dim objItem, objService, objProcess,strServiceList,strProcessKill Dim colListOfServices,colProcessList,strQuery,strServiceProcessID,strProcess Name, intRC strQuery="SELECT * FROM Win32_Service WHERE DisplayName = '" & strServiceName & "'" On Error Resume Next Set colListOfServices= objWMI(strServerName,strQuery) If err.number=0 Then err.clear For Each objService in colListOfServices strServiceProcessID = objService.ProcessId Next Wscript.Echo "The Process ID for "&strServiceName&" is : "&strServiceProcessID If strServiceProcessID>0 Then 'now to do the termination of the service's matching process strQuery = "Select * from Win32_Process Where ProcessID= '" & strServiceProcessID & "'" 'define WMI query Set colProcessList=objWMI(strServerName, strQuery)'retrieve WMI collection by calling the objWMI function 'wscript.echo err.number If err.number=0 Then For Each objWMIProcess In colProcessList intRC = objWMIProcess.Terminate() wscript.echo err.number Next Select Case intRC Case 0 Wscript.Echo " Terminated" Case 2 Wscript.Echo " Access denied" Case 3 Wscript.Echo " Insufficient privilege" Case 9 Wscript.Echo " Path not found" Case 21 Wscript.Echo " Invalid parameter" Case Else Wscript.Echo " Unable to terminate for undetermined reason" End Select End If Else wscript.echo "Invalide Process ID or Process terminated without intervention" End If End If End Function Function objWMI(strComputer, strWQL) Dim wmiNS, objWMIService wmiNS = "\root\cimv2" On Error Resume Next Set objWMIService=GetObject("winmgmts:" _ &"{impersonationLevel=impersonate}!\\" _ & strComputer & wmiNS) objWMIService.Security_.ImpersonationLevel = 3 objWMIService.Security_.privileges.addasstring "SeDebugPrivilege", True Select Case Err.Number Case 0 ' Success Set objWMI= objWMIService.ExecQuery(strWQL) Case 70 ' Run-time error '70': Permission denied wscript.echo "Access Denied connecting to "&strComputer 'Set objWMI="NA" Case 424 ' The remote server machine does not exist or is unavailable wscript.echo "The server " &UCase(strComputer)& " is unavailable or does not exist!" Case 462 ' The remote server machine does not exist or is unavailable wscript.echo "The server " &UCase(strComputer)& " is unavailable or does not exist!" Case Else wscript.echo "Unknown error connecting to server "&UCase(strComputer) End Select On Error GoTo 0 Set objWMIService= Nothing End Function *** Sent via Developersdex http://www.developersdex.com *** |