29april Topic Starter
Posts: 6
|
 |
« on: December 04, 2009, 02:52:03 PM » |
|
hi, I need to create a batch file that sends an email automatically when a windows service stops.
I could have the batch file run every 10 minutes to see if the service is active, but I have no idea how to give an if condition and then send an email. First of all is this possible? any suggestions would be great to know. Thanks.
|
|
|
|
|
|
|
gh0std0g74
Thanked: 37 Posts: 590
|
 |
« Reply #2 on: December 04, 2009, 04:37:35 PM » |
|
hi, I need to create a batch file that sends an email automatically when a windows service stops.
I could have the batch file run every 10 minutes to see if the service is active, but I have no idea how to give an if condition and then send an email. First of all is this possible? any suggestions would be great to know. Thanks.
here's an example vbscript to check service is up strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service") For Each objService in colRunningServices If objService.DisplayName = "Print Spooler" And objService.State = "Running" Then WScript.Echo "Print Spooler is Running" 'SEnd email here. End If Next
for sending email, you can either do it with vbscript (search google for "vbscript email") and there are code examples to do that. OR you can use blat.exe (search google for download). For batch method, you can use sc. check sc /? for more.
|
|
|
|
gh0std0g74
Thanked: 37 Posts: 590
|
 |
« Reply #3 on: December 04, 2009, 04:38:55 PM » |
|
Well you can't send emails with batch,
yes you can.
|
|
|
|
|
|
29april Topic Starter
Posts: 6
|
 |
« Reply #5 on: December 04, 2009, 04:54:42 PM » |
|
gh0std0g74, Thanks I'll search for sample VB scripts to send email as well. but how do I call this VB script from a batch file? Please let me know, I think that would solve my problem 
|
|
|
|
|
29april Topic Starter
Posts: 6
|
 |
« Reply #6 on: December 04, 2009, 05:03:11 PM » |
|
Also, is there a way for batch file to do it independently (without use of VB scripts)? Installing VB might be a long process
|
|
|
|
|
|
|
29april Topic Starter
Posts: 6
|
 |
« Reply #8 on: December 04, 2009, 06:00:47 PM » |
|
Thanks Helpmeh, can u let me know the code u use in batch file to call the vb script?
|
|
|
|
|
|
|
gh0std0g74
Thanked: 37 Posts: 590
|
 |
« Reply #10 on: December 04, 2009, 07:38:31 PM » |
|
gh0std0g74,
Thanks I'll search for sample VB scripts to send email as well. but how do I call this VB script from a batch file? Please let me know, I think that would solve my problem 
c:\test > cscript /nologo myscript.vbs
|
|
|
|
|
|
29april Topic Starter
Posts: 6
|
 |
« Reply #12 on: December 05, 2009, 02:16:00 AM » |
|
thanks for your superb support, people.. Im not done yet but I guess I got all what I wanted to know :-)
|
|
|
|
|
|
|
gh0std0g74
Thanked: 37 Posts: 590
|
 |
« Reply #14 on: December 05, 2009, 05:20:14 AM » |
|
//nologo with 2 slashes is preferred
yes. I always put /nologo after cscript.exe and its ok that way. Up to the individual until M$hit makes it mandatory for double slash syntax once and for all.
|
|
|
|
|
|
Bukhari1986
Thanked: 2 Posts: 39
|
 |
« Reply #16 on: December 05, 2009, 08:01:38 AM » |
|
great salmon I am impressed 
|
|
|
|
|
|
|
Sidewinder
Thanked: 97 Posts: 4,342
Experience: Familiar OS: Windows 7
|
 |
« Reply #18 on: December 05, 2009, 08:44:18 AM » |
|
hi, I need to create a batch file that sends an email automatically when a windows service stops.
I could have the batch file run every 10 minutes to see if the service is active, but I have no idea how to give an if condition and then send an email. First of all is this possible? any suggestions would be great to know. Thanks.
Another way to approach this would be to monitor the service and send the email when the service status changes to stopped. Rather then manually run a batch file every 10 minutes or use the scheduler, this script will run in an infinite loop monitoring the service. strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colMonitoredProcesses = objWMIService. _ ExecNotificationQuery("Select * From __InstanceModificationEvent " _ & " Within 1 where TargetInstance ISA 'Win32_Service'")
Do While True Set objLatestProcess = colMonitoredProcesses.NextEvent If LCase(objLatestProcess.TargetInstance.Name) = "" Then 'Name of service quoted; do not use display name If objLatestProcess.TargetInstance.State = "Stop pending" Then Call SendMail End if If objLatestProcess.TargetInstance.State = "Stopped" Then Call SendMail End if End if Loop
Sub SendMail() Set cdo = CreateObject("CDO.Message") With cdo .Subject = "Service Down" 'email subject line quoted .From = "" 'your email address quoted .To = "" 'recipient email address quoted .TextBody = "" 'email body text quoted .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "" 'your ISP SMTP server address .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Configuration.Fields.Update .Send End With Set cdo = Nothing End Sub
Fill in the information where noted, save script with a VBS extension and run from the command prompt as cscript scriptname.vbsGood luck. 
|
If you don't know where you are going, any road will get you there
-Lewis Carroll
|
|
|
|
|
Bukhari1986
Thanked: 2 Posts: 39
|
 |
« Reply #20 on: December 05, 2009, 09:09:36 AM » |
|
@ sidewinder
won't it require password for sending the mails
I mean if i add in the field From="somone@mydomain.com"
then will it send the email without the password here ??
|
|
|
|
|
Sidewinder
Thanked: 97 Posts: 4,342
Experience: Familiar OS: Windows 7
|
 |
« Reply #21 on: December 05, 2009, 09:47:54 AM » |
|
Sidewinder, once the script discovers the service is in the stopped state, will it keep sending emails every 10 minutes?
No. The script only sends an email when an event changes the service state to stopped or stop pending. Apparently, services and processes act differently in that processes terminate and flush out of memory while services are forever and may simply stop running. @ sidewinder
won't it require password for sending the mails
I mean if i add in the field From="somone@mydomain.com"
then will it send the email without the password here ??
Depends on the ISP. I got it to work as posted, but if a username and password are required (security breach) there are CDO configuration items for just that purpose. The OP never even mentioned the service name and for all we know the email may be going through an internal network where username and password are not required. 
|
If you don't know where you are going, any road will get you there
-Lewis Carroll
|
|
|
|
|
29april Topic Starter
Posts: 6
|
 |
« Reply #23 on: December 17, 2009, 12:39:53 PM » |
|
I executed the below script but nothing happens. If the service is stopped I get a dialog box with the wscript.echo command, if it is started, nothing happens. emails are not being sent out either (I am able to send independently from command prompt). Is there a way I can spool on the entire script to a log file and find out what the issue is? do you guys see anything wrong with the below script? PLEASE let me know. Thanks for ur support. strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer &
"\root\cimv2") Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service") For Each objService in colRunningServices If objService.DisplayName = "Licensing Service" And objService.State = "Stopped" Then WScript.Echo "Licensing Service is Stopped" Call SendMail End If Next
Sub SendMail() Set cdo = CreateObject("CDO.Message") With cdo .Subject = "Service Down" 'email subject line quoted .From = "name@name.com" 'your email address quoted .To = "name2@name.com" 'recipient email address quoted .TextBody = "Test"
'email body text quoted
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost"
'localhost
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Configuration.Fields.Update .Send End With Set cdo = Nothing End Sub
|
|
|
|
|
Sidewinder
Thanked: 97 Posts: 4,342
Experience: Familiar OS: Windows 7
|
 |
« Reply #24 on: December 18, 2009, 06:57:50 AM » |
|
I couldn't see anything wrong, but I couldn't get it to run either, even with valid values. Question: why is the smtpserver set to localhost? Are you running your own mail server? or are you using an ISP? strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service") For Each objService in colRunningServices If objService.DisplayName = "Licensing Service" And objService.State = "Stopped" Then WScript.Echo "Licensing Service is Stopped" Call SendMail End If Next
Sub SendMail() Set CDO = CreateObject("CDO.Message") With cdo .From = "name@name.com" .To = "name2@name.com" .Subject = "Service Down" .Textbody = "Test" .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp mail server" .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 ' .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "userid" ' .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" ' .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Configuration.Fields.Update .Send End With End Sub
If using an ISP, check with them for the smtp server name and the port to use (this information is probably on their website). If you need to use authentication, uncomment the three configuration statements and fill in the values appropriately. Yeah, I know having the userid and password in the script is a security breach, but that is whole other subject. Good luck. 
|
If you don't know where you are going, any road will get you there
-Lewis Carroll
|
|
|
ghostdog74
Thanked: 26 Posts: 1,511
|
 |
« Reply #25 on: December 18, 2009, 07:38:38 AM » |
|
or maybe there's something wrong with the schema site from M$.
|
|
|
|