windows - Bekræft (errorlevel) batch script kommandoer og send mail med deres output

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har flere batchfiler (cmd) som følger, der udfører nogle kommandoer og udskriver output fra deres fejlkode i en fil og sender en email til mig med output fra filen:


@echo off

set RESEXE1=0
set RESEXE2=0

SET MyPath=D:	estclient
SET PATH=\%MyPath\%;\%PATH\%
SET PATH=\%MyPath\%schema;\%PATH\%
SET PATH=\%MyPath\%xml;\%PATH\%
SET PATH=\%MyPath\%xsl;\%PATH\%
SET PATH=\%MyPath\%DashboardPlugins;\%PATH\%

:BEGIN

cd /d \%MyPath\%

set RESEXE1=\%ERRORLEVEL\%
echo RESEXE1 : \%RESEXE1\% > D:Templogs	est.txt

START "test" /MIN test.exe -UEOD /ccu:file:test2.config /pcu:file:D:scripts	est.config /p:Common/Log/Path=D:Misyslogsatch	est /p:Common/Log/Verbosity=Warning -S'Report Processing':":0 

set RESEXE2=\%ERRORLEVEL\%
echo RESEXE2 : \%RESEXE2\% >> D:Templogs	est.txt

:ENDBATCH

if \%RESEXE1\% == 0 set RESEXE=0

if \%RESEXE1\% NEQ 0 set RESEXE=1

if \%RESEXE2\% == 0 set RESEXE=0

if \%RESEXE2\% NEQ 0 set RESEXE=1

echo RESEXE : \%RESEXE\% >> D:Templogs	est.txt

echo \%~n0\%~x0 >> D:Templogs	est.txt

IF \%RESEXE\% NEQ 0  Powershell.exe -executionpolicy remotesigned -File D:Tempaaa.ps1


Den anden del er mit sendmail script:


$From = "them@test.com"
$To = "me@test.com"
#$Cc = "he@test.com"
$Subject = $scname
$Body = Get-Content -Path D:Templogs	est.txt
#$Attachments = D:Temp	est.txt
$SMTPServer = "test.com"
$SMTPPort = "25"
Send-MailMessage -From $From -to $To -Subject "[test][test] $Subject" -Body  ($body | Out-String) -SmtpServer $SMTPServer -port $SMTPPort –DeliveryNotificationOption OnSuccess


Mit spørgsmål er, hvordan kan jeg erklære en dynamisk variabel på batch (cmd) scripts for hver output fil (ex: test.txt), der genereres med fejlkode og anden info og bruge den i $ body variable fra sendmail script til output indholdet i e-mail.

Bedste reference


Batch-fil:


@echo off

set RESEXE1=0
set scname=\%~n0\%~x0
set scname2=\%~n0.txt
set pathlog=D:Templogs
set pathfilelog=\%pathlog\%\%scname2\%

:BEGIN

cd h: > \%pathfilelog\% 2>&1

set RESEXE1=\%ERRORLEVEL\%
echo RESEXE1 : \%RESEXE1\% >> \%pathfilelog\%

:ENDBATCH

 if \%RESEXE1\% == 0 set RESEXE=0

 if \%RESEXE1\% NEQ 0 set RESEXE=1

echo RESEXE : \%RESEXE\% >> \%pathfilelog\%

 echo \%~n0\%~x0 >> \%pathfilelog\%

 IF \%RESEXE\% NEQ 0  Powershell.exe -executionpolicy remotesigned -File D:Tempaaa.ps1 "\%scname\%" "\%scname2\%" "\%pathfilelog\%"


mail script fil:


$scname=$args[0] 
$scname2=$args[1]
$pathfilelog=$args[2]  

$From = "test@test.com"
$To = "test@test.com"
#$Cc = "test@test.com"
$Subject = $scname
$Body = Get-Content -Path $pathfilelog
#$Attachments = D:Temp	est.txt
$SMTPServer = "test.test.com"
$SMTPPort = "25"
Send-MailMessage -From $From -to $To -Subject "[test][test] $Subject - Failed" -Body  ($body | Out-String) -SmtpServer $SMTPServer -port $SMTPPort –DeliveryNotificationOption OnSuccess


Det løste mit problem, ty gutter.