Script to start service if not running then email results - email

I need to create a script which checks if a service is running and starts it if failed. Regardless of the outcome I would like an email which tells me the results. I would like this to be in a .bat file although .vbs is acceptable.
I have found various posts on how to do this. I am currently using:
set service=###
for /F "tokens=3 delims=: " %%H in ('sc query %service% ^ | findstr " STATE"') do (
if /I "%%H" NEQ "RUNNING" (net start %service%)
This runs successfully and will start the service if stopped however I am getting
%%H was unexpected at this time
This causing it to register as failed on Task scheduler
The second part of the script I am using is:
for /F "tokens=3 delims=: " %%H in ('sc query %service% ^| findstr " STATE"') do (
if /I "%%H" EQ "RUNNING" (
SendMail /smtpserver localhost /to me#mydomain.com /from watchdog#mydomain.com /subject Service Autostart Notification /body Autostart on service %service% succeded.
) else (
SendMail /smtpserver localhost /to me#mydomain.com /from watchdog#mydomain.com /subject Service Autostart Notification /body Autostart on service %service% failed.
)
)
)
)
This is not sending the email as "Sendmail is not recognised as an internal or external command, operable command or batch file"
Please could someone give me assistance with this. I have tried to find solutions online but have been unsuccessful thus far.
Kind Regards

This batch file allows you to send an email with no third party software, if your IT has not locked down windows scripting host.
Change the port and SSL encryption if your email server needs it - read the first part of the batch file.
You can call the batch file like this:
CALL email.bat "myname#gmail.com" "RecipientEmailAddress#server.com" "Subject line" "Email Body in one line" "smtp.gmail.com" "myname#gmail.com" "password" "d:\folder\filename to attach.txt"
Email.bat
:: email.bat :::::::::::::::::::::::::::::::::::::::::::::::::::::
#echo off
setlocal
:: use these settings to send from a gmail account
:: set port=465 and set SSL=True
:: use these settings for standard email SMTP port and no encryption
:: set port=25 and set SSL=False
:: Change these following items to use the same variables all the time
:: or use the command line to pass all the variables
set Port=25
set SSL=False
set From="myemail#myemailserver.com"
set To="recipient#server.com"
set Subject="Subject line"
set Body="Email Body in one line"
set SMTPServer="mailservername.myemailserver.com"
set User="username"
set Pass="password"
set fileattach="d:\myfolder\file.txt"
:: This section sets the command line arguments
:: use this format: CALL email.bat "myname#gmail.com" "RecipientEmailAddress#server.com" "Subject line" "Email Body in one line" "smtp.gmail.com" "myname#gmail.com" "password" "d:\folder\filename to attach.txt"
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"
del "%vbsfile%" 2>nul
set cdoSchema=http://schemas.microsoft.com/cdo/configuration
echo >>"%vbsfile%" Set objArgs = WScript.Arguments
echo >>"%vbsfile%" Set objEmail = CreateObject("CDO.Message")
echo >>"%vbsfile%" objEmail.From = %From%
echo >>"%vbsfile%" objEmail.To = %To%
echo >>"%vbsfile%" objEmail.Subject = %Subject%
echo >>"%vbsfile%" objEmail.Textbody = %body%
if exist %fileattach% echo >>"%vbsfile%" objEmail.AddAttachment %fileattach%
echo >>"%vbsfile%" with objEmail.Configuration.Fields
echo >>"%vbsfile%" .Item ("%cdoSchema%/sendusing") = 2 ' not local, smtp
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpserver") = %SMTPServer%
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpserverport") = %port%
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpauthenticate") = 1 ' cdobasic
echo >>"%vbsfile%" .Item ("%cdoSchema%/sendusername") = %user%
echo >>"%vbsfile%" .Item ("%cdoSchema%/sendpassword") = %pass%
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpusessl") = %SSL%
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpconnectiontimeout") = 30
echo >>"%vbsfile%" .Update
echo >>"%vbsfile%" end with
echo >>"%vbsfile%" objEmail.Send
cscript.exe /nologo "%vbsfile%"
echo email sent (if variables were correct)
del "%vbsfile%" 2>nul
goto :EOF

Related

Robocopy certain filename and latest file

Im kinda need help with scripting robocopy.
I want copy file with "-Full.zip" contain in the filename and the latest file.
[I want copy filename contain -Full.zip]
[1]: https://i.stack.imgur.com/ngJ3V.jpg
Here is my code but not working
#echo off
set Source=D:\Source
set Target=F:\Target
set Logfile=F:\Test\logcopy.log
SET debug=-debug -log blat.log -timestamp
set Scr="%temp%\TempVBS.vbs"
( echo sPath = "%Source%"
echo Set oFSO = CreateObject("Scripting.Filesystemobject"^)
echo sYesterday = FormatDateTime(DateAdd("d", Now(^), 0^),0^)
echo Process sPath
echo Sub Process(sP^)
echo For Each oFile In oFSO.GetFolder(sp^).Files
echo If FormatDateTime(oFile.DateLastModified,2^) = sYesterday _
echo Then oFile.Attributes = 32 _
echo Else oFile.Attributes = 0
echo Next
echo For Each oFolder In oFSO.GetFolder(sP^).SubFolders
echo Process oFolder.Path
echo Next
echo End Sub ) > %Scr%
cscript //nologo %Scr%
del %Scr%
robocopy "*-Full.zip" /a /s "%Source%" "%Target%" /XF /XC /XO /LOG:%Logfile%

Errorlevel not working when using date command in batch file

I've made this code to change the date. But when i enter a wrong date, the errorlevel command appears beeing ignored.
#echo off
#setlocal enableextensions
#cd /d "%~dp0"
mode 48,12
:start
cls
echo.
echo 1 - Mudar data
echo 2 - Retornar a data atual
echo.
echo.
echo.
echo.
choice /n /c:12 /m "Digite uma op‡Æo:"%1
if errorlevel ==2 goto 2
if errorlevel ==1 goto 1
:1
cls
set /p "dd=Digite o dia: "
cls
set /p "mm=Digite o mes: %dd% - "
cls
set /p "aa=Digite o ano: %dd% - %mm% - "
cls
date %dd%-%mm%-%aa%
if not errorlevel 1 (
cls
echo Data modificada.
pause
goto start
)
if errorlevel 1 (
cls
echo Erro ao mudar a data.
pause
goto start
)
:2
cls
w32tm /resync >nul 2>nul
cls
goto start
I supposed that if the date was typed wrong, it would appears a echo Erro ao mudar a data. But it only opens the date command screen asking to change the date because was typed wrong.
Edit 1
Just update my code including the commands to stop the Windows Time Service, because even i changed the date, after sometime the real date was replaced again.
#echo off
setlocal enableextensions
cd /d "%~dp0"
mode 42,12
:begin
cls
echo ------------------------------------------
echo MUDAR A DATA DO WINDOWS
echo ------------------------------------------
echo( &echo(
echo 1 - Escolher a data & echo( &echo 2 - Retornar para a data atual
echo( & echo( &echo(
choice /n /c:12 /m "Digite uma op‡Æo:"%1
goto :lab%errorlevel%
:lab1
cls & set /p "dd=Digite o dia: "
cls & set /p "mm=Digite o mes: %dd% / "
cls & set /p "aa=Digite o ano: %dd% / %mm% / "
date %dd%/%mm%/%aa% <nul && (
cls
net stop w32time >nul 2>nul
sc config w32time start= disabled >nul 2>nul
echo Data modificada.
timeout /nobreak /t 2 >nul 2>nul
goto begin
) || (
cls & echo Erro ao mudar a data.
echo( &echo( &echo(
pause
goto begin
)
:lab2
net start w32time >nul 2>nul
sc config w32time start= demand >nul
cls & w32tm /resync >nul 2>&1
echo Data atual retornada.
timeout /nobreak /t 2 >nul 2>nul
cls & goto begin
If you redirect input to nul for the DATE command, you still get the error message and prompt to enter a valid date, but then the command immediately fails with an appropriate error return code.
I find it much easier to use && and || to handle success and failure instead of using IF.
date %dd%-%mm%-%aa% <nul && (
cls
echo Data modificada.
) || (
cls
echo Erro ao mudar a data.
)
pause
goto start
Rename your lables :1 and :2 with :lab1 and :lab 2 then remove these lines:
if errorlevel ==2 goto 2
if errorlevel ==1 goto 1
and replace them with this line:
goto :lab%errorlevel%
You should then only have:
choice /n /c:12 /m "Digite uma op‡Æo:"%1
goto :lab%errorlevel%
Then other observations, remove the echo. lines and replace them with echo(
cls lines on their own looks ugly, so I like to integrate them by running them with & with other commands to make it look nicer
So a total cleanup will be:
#echo off
setlocal enableextensions
cd /d "%~dp0"
mode 48,12
:begin
cls
echo( & echo 1 - Mudar data & echo 2 - Retornar a data atual
echo( & echo( &echo( &echo(
choice /n /c:12 /m "Digite uma op‡Æo:"%1
goto :lab%errorlevel%
:lab1
cls & set /p "dd=Digite o dia: "
cls & set /p "mm=Digite o mes: %dd% - "
cls & set /p "aa=Digite o ano: %dd% - %mm% - "
cls & echo %dd%-%mm%-%aa% | date
if not errorlevel 1 (
cls
echo Data modificada.
pause
goto begin
) else (
cls & echo Erro ao mudar a data.
pause
goto start
)
:lab2
cls & w32tm /resync >nul 2>&1
cls & goto begin

Manage a Batch-based server in PowerShell

I downloaded the binaries of a web server app. Extracting it leaves me with the following directory tree:
./
bin/
start.bat
stop.bat
lib/
*.jar
*.*
As a PowerShell fan, I would rather call Start-MyWebServer.ps1 than start.bat.
This task would be simple if it wasn't for start.bat: it writes the logs directly in the console, and asks to Press a key to continue... before exiting (pause?). The same goes for stop.bat.
I've tried various solutions based on Start-Process -FilePath "...\start.bat" -NoNewWindow, with an without -Wait in order to start the server in the background...
I also tried using Start-Job:
Start-Job -Name "MyWebServer" -ScriptBlock {
Start-Process -FilePath "...\start.bat" -Wait -NoNewWindow
} | Out-Null
This last solution almost works, i.e. when Start-MyWebServer.ps1 returns, the server is still initializing, even though the job is marked as completed. Is there a better solution to my problem that polling the server until it's ready? Or is it the expected behavior of a Start-* commandlet?
Here is the content of start.bat (actually named startup.bat, credit: GeoServer):
#echo off
rem -----------------------------------------------------------------------------
rem Startup Script for GeoServer
rem -----------------------------------------------------------------------------
cls
echo Welcome to GeoServer!
echo.
set error=0
rem JAVA_HOME not defined
if "%JAVA_HOME%" == "" goto trySystemJava
rem JAVA_HOME defined incorrectly
if not exist "%JAVA_HOME%\bin\java.exe" goto badJava
rem Setup the java command and move on
set RUN_JAVA=%JAVA_HOME%\bin\java
echo JAVA_HOME: %JAVA_HOME%
echo.
:checkGeoServerHome
rem GEOSERVER_HOME not defined
if "%GEOSERVER_HOME%" == "" goto noHome
rem GEOSERVER_HOME defined incorrectly
if not exist "%GEOSERVER_HOME%\bin\startup.bat" goto badHome
goto checkDataDir
:trySystemJava
for /f %%i in ('where java') do set RUN_JAVA=%%i
rem --- we might be on amd64 having only x86 jre installed ---
if "%RUN_JAVA%"=="" if DEFINED ProgramFiles(x86) if NOT "%PROCESSOR_ARCHITECTURE%"=="x86" (
rem --- restart the batch in x86 mode---
echo Warning: No java interpreter found in path.
echo Retry using Wow64 filesystem [32bit environment] redirection.
%SystemRoot%\SysWOW64\cmd.exe /c %0 %*
exit /b %ERRORLEVEL%
)
if "RUN_JAVA%"=="" goto noJava
goto checkGeoServerHome
:noJava
echo The JAVA_HOME environment variable is not defined, and no Java executable could be found.
goto JavaFail
:badJava
echo The JAVA_HOME environment variable is not defined correctly.
goto JavaFail
:JavaFail
echo Please install Java or, if present but not in the path, set this environment variable via the following command:
echo set JAVA_HOME=[path to Java]
echo Example:
echo set JAVA_HOME=C:\Program Files\Java\jdk8
echo.
set error=1
goto end
:noHome
if exist ..\start.jar goto noHomeOK
echo The GEOSERVER_HOME environment variable is not defined.
goto HomeFail
:badHome
if exist ..\start.jar goto badHomeOK
echo The GEOSERVER_HOME environment variable is not defined correctly.
goto HomeFail
:HomeFail
echo This environment variable is needed to run this program.
echo.
echo Set this environment variable via the following command:
echo set GEOSERVER_HOME=[path to GeoServer]
echo Example:
echo set GEOSERVER_HOME=C:\Program Files\GeoServer
echo.
set error=1
goto end
:noHomeOK
echo The GEOSERVER_HOME environment variable is not defined.
goto setHome
:badHomeOK
echo The GEOSERVER_HOME environment variable is not defined correctly.
goto setHome
:setHome
echo Temporarily setting GEOSERVER_HOME to the following directory:
cd ..
set GEOSERVER_HOME=%CD%
echo %GEOSERVER_HOME%
echo.
goto checkDataDir
:checkDataDir
rem GEOSERVER_DATA_DIR not defined
if "%GEOSERVER_DATA_DIR%" == "" goto noDataDir
goto setMarlinRenderer
:noDataDir
rem if GEOSERVER_DATA_DIR is not defined then use GEOSERVER_HOME/data_dir/
if exist "%GEOSERVER_HOME%\data_dir" goto setDataDir
echo No valid GeoServer data directory could be located.
echo Please set the GEOSERVER_DATA_DIR environment variable.
echo.
echo Set this environment variable via the following command:
echo set GEOSERVER_DATA_DIR=[path to data_dir]
echo Example:
echo set GEOSERVER_DATA_DIR=C:\Program Files\GeoServer\data_dir
echo.
set error=1
goto end
:setDataDir
set GEOSERVER_DATA_DIR=%GEOSERVER_HOME%\data_dir
echo The GEOSERVER_DATA_DIR environment variable is not defined correctly.
echo Temporarily setting GEOSERVER_DATA_DIR to the following directory:
echo %GEOSERVER_DATA_DIR%
echo.
goto setMarlinRenderer
:setMarlinRenderer
cd %GEOSERVER_HOME%
for /f "delims=" %%i in ('dir /b/s "%GEOSERVER_HOME%\webapps\geoserver\WEB-INF\lib\marlin*.jar"') do set MARLIN_JAR=%%i
if "%MARLIN_JAR%" == "" (
echo Marlin renderer jar not found
goto run
)
set MARLIN_ENABLER=-Xbootclasspath/a:"%MARLIN_JAR%" -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine
set JAVA_OPTS=%JAVA_OPTS% %MARLIN_ENABLER%
goto run
:run
cd %GEOSERVER_HOME%
echo Please wait while loading GeoServer...
echo.
"%RUN_JAVA%" %JAVA_OPTS% -DGEOSERVER_DATA_DIR="%GEOSERVER_DATA_DIR%" -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar start.jar
cd bin
goto end
:end
if %error% == 1 echo Startup of GeoServer was unsuccessful.
echo.
pause
Did you consider the capturing of the output of the start.bat?
$psi = New-Object System.Diagnostics.ProcessStartInfo
$psi.FileName = '...\start.bat'
$psi.RedirectStandardOutput = $true
$psi.UseShellExecute = $false
$psi.WindowStyle = 'Minimized'
$bytes = New-Object System.Collections.ArrayList
$s = ''
$enc = [System.Text.Encoding]::ASCII
$done = 'Press any key to continue'
$p = [System.Diagnostics.Process]::Start($psi)
for() {
$i = $bytes.add($p.StandardOutput.BaseStream.ReadByte())
if( $bytes[$i] -lt 0 ) { break }
$s = $enc.GetString($bytes)
if( $s -match "`n${done}$" ) { break }
}
if( !$p.HasExited ) {
$p.Kill()
Write-Host 'done...'
}
$p.Dispose()

How can I get the results of a CHKDSK that run on boot?

Problematic
CHKDSK ran when my machine rebooted, and displayed some stuff.
Problem is I have no idea what it displayed, since it then proceeded
to reboot the machine when it was done. How do I get it to stop,
pause or otherwise let me see what it did ?
chkdsk cannot run because the volume is in use by another process mean
?, CHKDSK needs exclusive access to the disk it’s checking if it’s
been instructed to attempt fixes or repairs. If that disk is your
Windows drive (C:), CHKDSK can’t have exclusive access, because
Windows is using that drive simply to run your system.
When we restart, the CHKDSK is performed before Windows is loaded.
CHKDSK runs as it normally does, and when it completes, it reboots the system – which, of course, causes any progress or results that might have been displayed on-screen to disappear.
In order to create a helpful tool for maintenance of my hard drives to check, fix and repair them for errors.
I did this batch
#echo off
Title Check Disk drives for errors and fix them by Hackoo 2016
mode con cols=67 lines=5 & Color 0A
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
set "TmpLog=%Tmp%\TmpLog.txt"
set "Log=%~dp0%computername%_%~n0.txt"
If Exist "%TmpLog%" Del "%TmpLog%"
If exist "%Log%" Del "%Log%"
REM --> Check for permissions
Reg query "HKU\S-1-5-19\Environment" >nul 2>&1
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
Echo.
ECHO **************************************
ECHO Running Admin shell... Please wait...
ECHO **************************************
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
::::::::::::::::::::::::::::
:: START ::
::::::::::::::::::::::::::::
( Echo Scan started # & Date /T & Time /T & echo ************************ ) > "%TmpLog%"
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=2" %%i in ('wmic logicaldisk where "drivetype=3" ^|find /i ":"') do (
set "fix=%%i"
Call :Affich !fix!
(
echo !fix! Drive
echo ************************
echo(
(echo O
echo Y) | CHKDSK !fix! /f
echo(
echo ************************
)>> "%TmpLog%"
)
EndLocal
Goto Question
Exit /b
:Question
( echo Scan finished # & Date /T & Time /T & echo ************************ )>> "%TmpLog%"
CMD /U /C Type "%TmpLog%" > "%Log%"
If Exist "%TmpLog%" Del "%TmpLog%"
(
echo Answ = MsgBox("Did you want to reboot the computer to complete the scanning ?",VbYesNo+VbQuestion,"Reboot the computer to check hard disk drives for errors by Hackoo"^)
echo If Answ = VbYes then
echo wscript.Quit(0^)
echo Else
echo wscript.Quit(1^)
echo End If
)>"%tmp%\%~n0.vbs"
Cscript /nologo "%tmp%\%~n0.vbs"
IF "%errorlevel%" EQU "1" (start "" "%Log%" & Exit ) else (goto Shutdown)
:Shutdown
echo(
cls
echo(
echo Save your work - Reboot of your computer in 20 seconds
echo(
echo Enregistrer vos documents - Redemarrage du PC dans 20 seconds
Shutdown.exe /r /t 20 /c "Enregistrer vos documents - Redemarrage du PC dans 20 secondes"
start "" %Log%
pause>nul
exit /b
:Affich
Cls
echo(
echo ***********************************
Echo Please wait a while Scanning "%~1"
echo ***********************************
Timeout /T 2 /nobreak>nul
exit /b
So, my question is : How can i get the results of a CHKDSK that run on boot by batch or powershell ?
The information is recorded in the eventlog. You should be able to obtain it like this (using PowerShell):
Get-EventLog -LogName Application -Source Wininit |
Where-Object { $_.Message -like '*checking file system*' } |
Sort-Object TimeGenerated -Descending |
Select-Object -First 1 -Expand Message
I found the answer here:
get-winevent -FilterHashTable #{logname="Application"; id="1001"}| ?{$_.providername –match "wininit"} | fl timecreated, message | out-file Desktop\CHKDSKResults.txt
In batch file we can do like that:
#echo off
set "Log=%tmp%\CHKDSKResults.txt"
If Exist "%Log%" del "%Log%"
Powershell -Command "& "Get-winevent -FilterHashTable #{logname='Application'; id='1001'}^|?{$_.providername -match 'wininit'} ^| fl timecreated, message ^| out-file '%Log%'"
Start "" "%Log%"
EDIT : On 27/07/2016 The final code :
#echo off
Title Check Disk drives for errors and fix them by Hackoo 2016
mode con cols=67 lines=5 & Color 0A
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
set "TmpLog=%Tmp%\TmpLog.txt"
set "Log=%~dp0%computername%_%~n0.txt"
set "MyVBSFile=%~dp0%~n0_On_Boot.vbs"
set "Value=CHKDSK_ON_BOOT"
Set "Key=HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce"
If Exist "%TmpLog%" Del "%TmpLog%"
If exist "%Log%" Del "%Log%"
REM --> Check for permissions
Reg query "HKU\S-1-5-19\Environment" >nul 2>&1
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
Echo.
ECHO **************************************
ECHO Running Admin shell... Please wait...
ECHO **************************************
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
::::::::::::::::::::::::::::
:: START ::
::::::::::::::::::::::::::::
( Echo Scan started # & Date /T & Time /T & echo ************************ ) > "%TmpLog%"
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=2" %%i in ('wmic logicaldisk where "drivetype=3" ^|find /i ":"') do (
set "fix=%%i"
Call :Affich !fix!
(
echo !fix! Drive
echo ************************
echo(
(echo O
echo Y) | CHKDSK !fix! /f
echo(
echo ************************
)>> "%TmpLog%"
)
EndLocal
Goto Question
Exit /b
::******************************************************************
:Question
( echo Scan finished # & Date /T & Time /T & echo ************************ )>> "%TmpLog%"
CMD /U /C Type "%TmpLog%" > "%Log%"
If Exist "%TmpLog%" Del "%TmpLog%"
(
echo Answ = MsgBox("Did you want to reboot the computer to complete the scanning ?",VbYesNo+VbQuestion,"Reboot the computer to check hard disk drives for errors by Hackoo"^)
echo If Answ = VbYes then
echo wscript.Quit(0^)
echo Else
echo wscript.Quit(1^)
echo End If
)>"%tmp%\%~n0.vbs"
Cscript /nologo "%tmp%\%~n0.vbs"
IF "%errorlevel%" EQU "1" ( goto AddKey ) else ( goto Shutdown )
::******************************************************************
:Shutdown
echo(
cls
echo(
echo Save your work - Reboot of your computer in 120 seconds
echo(
echo Enregistrer vos documents - Redemarrage du PC dans 120 seconds
Call:AddKey && Shutdown.exe /r /t 120 /c "Enregistrer vos documents - Redemarrage du PC dans 120 secondes"
pause>nul
exit /b
::******************************************************************
:Affich
Cls
echo(
echo ***********************************
Echo Please wait a while Scanning "%~1"
echo ***********************************
Timeout /T 2 /nobreak>nul
exit /b
::******************************************************************
:AddKey
reg query "%key%" /v "%Value%" >nul 2>&1
If "%errorlevel%" EQU "0" ( Goto :EOF
) Else (
reg add "%Key%" /v "%Value%" /t REG_SZ /d "%MyVBSFile%">nul
(
echo Option Explicit
echo 'Run as Admin
echo If Not WScript.Arguments.Named.Exists("elevate"^) Then
echo CreateObject("Shell.Application"^).ShellExecute DblQuote(WScript.FullName^) _
echo , DblQuote(WScript.ScriptFullName^) ^& " /elevate", "", "runas", 1
echo WScript.Quit
echo End If
echo Dim ws,PSCommand,LogFile,ret
echo LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, "."^)^) ^& "txt"
echo set ws = createobject("wscript.shell"^)
echo PSCommand = "cmd /c Powershell -Command ""& ""Get-winevent -FilterHashTable #{logname='Application'; id='1001'}^|?{$_.providername -match 'wininit'} ^| fl timecreated, message ^| out-file "^& SimpleQuote(LogFile^) ^&""
echo ret = ws.run(PScommand,0,True^)
echo ws.run DblQuote(LogFile^)
echo '**************************************
echo Function DblQuote(Str^)
echo DblQuote = chr(34^) ^& Str ^& chr(34^)
echo End function
echo '**************************************
echo Function SimpleQuote(Str^)
echo SimpleQuote = ChrW(39^) ^& Str ^& ChrW(39^)
echo End Function
echo '**************************************
)>"%MyVBSFile%"
start "" "%Log%"
)
Exit /b
::*******************************************************************

VB script for send mail

I dont have knowledge about vb scripting. so m asking here please help me... :)
we have one backup batch script which copy all data to another server using robo copy.
we schedule that script, but all the time we have to go that server and check manually that script run or not.
now we have write one vb script that will call that batch script and check that script run properly if script run properly then mail will come as backup completed else backup is not completed.
please if you have any idea about vb script please help me.
You can use mailsend.exe , just have the exe placed in your scripts folder & append the below code to you RoboCopy script at the end. If you don't want to cc or bcc anyone just add +cc & +bcc
type logs.txt | mailsend.exe -smtp smtp_server_ip_or_FQDN -port 25 -d smtp.mail.com -t xyz#mail.com -f seding_from#mail.com -sub "Whatever Subject" -user mail_username#mail.com -pass mailpassword -auth -cc xyz#mail.com -bcc xyz#mail.com
Here's a batch file that uses VBS to send an email.
Read the comments in the script to see how to test it.
:: email.bat :::::::::::::::::::::::::::::::::::::::::::::::::::::
#echo off
setlocal
:: use these settings to send from a gmail account
:: set port=465 and set SSL=True
:: use these settings for standard email SMTP port and no encryption
:: set port=25 and set SSL=False
:: Change these following items to use the same variables all the time
:: or use the command line to pass all the variables
set Port=25
set SSL=False
set From="myemail#myemailserver.com"
set To="recipient#server.com"
set Subject="Subject line"
set Body="Email Body in one line"
set SMTPServer="mailservername.myemailserver.com"
set User="username"
set Pass="password"
set fileattach="d:\myfolder\file.txt"
:: This section sets the command line arguments
:: use this format: CALL email.bat "myname#gmail.com" "RecipientEmailAddress#server.com" "Subject line" "Email Body in one line" "smtp.gmail.com" "myname#gmail.com" "password" "d:\folder\filename to attach.txt"
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"
del "%vbsfile%" 2>nul
set cdoSchema=http://schemas.microsoft.com/cdo/configuration
echo >>"%vbsfile%" Set objArgs = WScript.Arguments
echo >>"%vbsfile%" Set objEmail = CreateObject("CDO.Message")
echo >>"%vbsfile%" objEmail.From = %From%
echo >>"%vbsfile%" objEmail.To = %To%
echo >>"%vbsfile%" objEmail.Subject = %Subject%
echo >>"%vbsfile%" objEmail.Textbody = %body%
if exist %fileattach% echo >>"%vbsfile%" objEmail.AddAttachment %fileattach%
echo >>"%vbsfile%" with objEmail.Configuration.Fields
echo >>"%vbsfile%" .Item ("%cdoSchema%/sendusing") = 2 ' not local, smtp
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpserver") = %SMTPServer%
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpserverport") = %port%
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpauthenticate") = 1 ' cdobasic
echo >>"%vbsfile%" .Item ("%cdoSchema%/sendusername") = %user%
echo >>"%vbsfile%" .Item ("%cdoSchema%/sendpassword") = %pass%
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpusessl") = %SSL%
echo >>"%vbsfile%" .Item ("%cdoSchema%/smtpconnectiontimeout") = 30
echo >>"%vbsfile%" .Update
echo >>"%vbsfile%" end with
echo >>"%vbsfile%" objEmail.Send
cscript.exe /nologo "%vbsfile%"
echo email sent (if variables were correct)
del "%vbsfile%" 2>nul
goto :EOF