Solved

VBS script to kill process after x amount of seconds

Posted on 2009-03-30
5
598 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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

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.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

760 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now