Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

VBS script to kill process after x amount of seconds

Posted on 2009-03-30
5
Medium Priority
?
644 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 200 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

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

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

Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
Suggested Courses

578 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