Solved

VBS script to kill process after x amount of seconds

Posted on 2009-03-30
5
606 Views
Last Modified: 2013-12-26
I have a program that opens up microsoft word.  Sometimes that program hangs, which means that Microsoft word is still open.  I would like to get a script that will run lets say every 5 minutes and check to see how long Microsoft word has been open.   If it has been open for lets say 15 minutes or more, I want it to email me.  I have figured out how to make things email me but I have not figured out how to have it calculate how long a program has been open and then perform an action based on the result.  

Any help would be greatly appreciated.
0
Comment
Question by:djturizmo
  • 3
  • 2
5 Comments
 
LVL 8

Expert Comment

by:jwarnken
ID: 24023032
You can use wmi to get the performance data that should get you on your way
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process",,48) 
For Each objItem in colItems 
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Win32_PerfFormattedData_PerfProc_Process instance"
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "ElapsedTime: " & objItem.ElapsedTime
    Wscript.Echo "Name: " & objItem.Name
Next

Open in new window

0
 

Author Comment

by:djturizmo
ID: 24023132
What is the 48 for?
0
 

Author Comment

by:djturizmo
ID: 24024349
OK this is what I have so far.  Can you help with it?  This script runs with no errors but It seems like it doesn't return and instance of winword.exe

strComputer = "."
strWaitTime = 15
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
    "Select * from Win32_PerfFormattedData_PerfProc_Process Where Name = 'WINWORD.EXE'")

      If ElapsedTime > strWaitTime Then
            Set objEmail = CreateObject("CDO.Message")
      
            objEmail.From = "TEST@TESTcom"
            objEmail.To = "TEST@TEST.com"
            objEmail.Subject = "Status Hung"
            objEmail.Textbody = "Status Hung"
            objEmail.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
            objEmail.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
                    "blah.blah.local"
            objEmail.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
            objEmail.Configuration.Fields.Update
            objEmail.Send

      End If
0
 
LVL 8

Accepted Solution

by:
jwarnken earned 50 total points
ID: 24030169
This will work. I added an echo so you can be sure to see it process the results of the query.

Also the ElapsedTime value is in seconds so I changed your wait time to 900 (15 min.)


strComputer = "."
strWaitTime = 900
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfFormattedData_PerfProc_Process Where Name = 'WINWORD'")
For Each objItem in colItems 
	Wscript.Echo "Name: " & objItem.Name
	Wscript.Echo "ElapsedTime: " & objItem.ElapsedTime
	If objItem.ElapsedTime > strWaitTime Then
            Set objEmail = CreateObject("CDO.Message")
            objEmail.From = "TEST@TESTcom"
            objEmail.To = "TEST@TEST.com"
            objEmail.Subject = "Status Hung"
            objEmail.Textbody = "Status Hung"
            objEmail.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
            objEmail.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
                    "blah.blah.local" 
            objEmail.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
            objEmail.Configuration.Fields.Update
            objEmail.Send
 
      End If
NEXT

Open in new window

0
 

Author Closing Comment

by:djturizmo
ID: 31564516
Thanks for the help, that did the trick.
0

Featured Post

MIM Survival Guide for Service Desk Managers

Major incidents can send mastered service desk processes into disorder. Systems and tools produce the data needed to resolve these incidents, but your challenge is getting that information to the right people fast. Check out the Survival Guide and begin bringing order to chaos.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
Learn the basics of strings in Python: declaration, operations, indices, and slicing. Strings are declared with quotations; for example: s = "string": Strings are immutable.: Strings may be concatenated or multiplied using the addition and multiplic…
The viewer will learn how to dynamically set the form action using jQuery.

825 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question