@echo off
setlocal
rem Count variable for inactive services.
set "ServicesInactive=0"
rem Increment count variable to number of start services.
for /f "tokens=1*" %%a in ('sc queryex state^=inactive ^| findstr /r
/c:"DISPLAY_NAME:.*ASP"') do net start "%%b" && set /a "ServicesInactive+=1"
rem Send email if count is greater than zero.
if %ServicesInactive% gtr 0 goto :mail
goto :endmail
:mail
set Port=25
set SSL=False
set From="abc@gmail.com"
set To="abc@gmail.com"
set Subject="Subject line"
set Body="Email Body in one line"
set SMTPServer="smtp.gmail.com"
set User="abc@gmail.com"
set Pass="1234567"
if "%~7" NEQ "" (
set From="%~1"
set To="%~2"
set Subject="%~3"
set Body="%~4"
set SMTPServer="%~5"
set User="%~6"
set Pass="%~7"
set fileattach="%~8"
)
set "vbsfile=%temp%\email-bat.vbs"
set cdoSchema=http://schemas.microsoft.com/cdo/configuration
(
echo Set objArgs = WScript.Arguments
echo Set objEmail = CreateObject("CDO.Message")
echo objEmail.From = %From%
echo objEmail.To = %To%
echo objEmail.Subject = %Subject%
echo objEmail.Textbody = %body%
if exist %fileattach% echo objEmail.AddAttachment %fileattach%
echo with objEmail.Configuration.Fields
echo .Item ("%cdoSchema%/sendusing") = 2 ' not local,smtp
echo .Item ("%cdoSchema%/smtpserver") = %SMTPServer%
echo .Item ("%cdoSchema%/smtpserverport") = %port%
echo .Item ("%cdoSchema%/smtpauthenticate") = 1 ' cdobasic
echo .Item ("%cdoSchema%/sendusername") = %user%
echo .Item ("%cdoSchema%/sendpassword") = %pass%
echo .Item ("%cdoSchema%/smtpusessl") = %SSL%
echo .Item ("%cdoSchema%/smtpconnectiontimeout") = 30
echo .Update
echo end with
echo objEmail.Send
) > "%vbsfile%"
cscript.exe /nologo "%vbsfile%"
echo email sent (if variables were correct)
del "%vbsfile%" 2>nul
:endmail
Переменная ServicesInactive
имеет значение от set
до 0
, и каждая служба, запущенная в цикле for
, будет увеличивать ServicesInactive
на 1
.
После for
цикл завершен, если ServicesInactive
больше 0
, то по команде goto :email
будет отправлено электронное письмо, в противном случае будет goto :endmail
.
Перемещено эхо между скобками, что делает запись ввременный файл VBS немного аккуратнее и эффективнее.