0

以下のコードでは、エラーレベル チェックは機能しません。そのため、障害が発生した場合、メールは送信されません。Powershell コマンドは正しく、この構造の外部で機能します。私も直接チェックを試みました: If %ERRORLEVEL% NEQ 0

しかし、それもうまくいきません。

何か案は?ありがとう!

@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^&            right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "dt=%mm%-%dd%-%yyyy%"

"LogParser.exe" "SELECT * INTO tblIisLog FROM \\iislogs\%dt%\*.log" -i:iisw3c -o:SQL -    oConnString:"Driver=SQL Server;Server=servername; Database=IISDB;Trusted_Connection=yes" -    createTable:ON
SET /a RC=%ERRORLEVEL%

IF %RC% NEQ 0
(

   powershell.exe -executionpolicy unrestricted -command "send-mailmessage -from     'me@abc.com' -to 'me@abc.com' -subject 'test' -body 'testing' -smtpServer 'smtpserv.com'"

)
4

2 に答える 2

0

LogParser.exe がエラーレベルを返すと仮定すると、これは機能し、より簡潔に起動できるはずです。

LogParser.exe "SELECT blah, blah, blah..."
if errorlevel 1 powershell.exe -executionpolicy ...
于 2014-07-01T22:47:34.703 に答える
0

エラー時に実際にゼロ以外をlogparser返したと主張する記事を正確に1つ読みました。errorlevel

ユーザー変数に割り当てが行われたと思われますerrorlevel。コンストラクトは実際の で動作するif errorlevel 1 ...ため機能しますが、使用するアプローチは最初にユーザー設定変数を調べます。またはそのチャム ( 、など)に任意の値を割り当てると、予期しない結果が生じる可能性があります (ただし、デバッグ中に役立つ場合があります。これらの「変数」の 1 つを既知の値に設定できます)。if errorlevelerrorlevel%errorlevel%errorleveldatetimerandom

この理論をテストする本当に簡単な 2 秒の方法 (治療法である場合とそうでない場合があります) は、単純に次の行を含めることです。

set "errorlevel="

logparser電話の直前。どんなテクニカル分析や議論よりもはるかに迅速です。

于 2014-07-01T23:14:20.240 に答える