batからPowerShell ログ内容をメールで出力 メモ
作業
・実行結果ログファイルを出力するにバッチ処理に追記
※ログ出力し終わった直後に下記コマンドを設置
powershell -ExecutionPolicy RemoteSigned -Command ~ (省略)
・powershellファイルを作成。
bat側処理
bat側で以下要素を指定し、PowerShellに渡す。
その後、メール結果を表示。
・PowerShell処理ファイル(絶対パス)
・FROM(差出人メールアドレス)
・TO(Toメールアドレス※複数の場合「;」で区切る)
・CC(Ccメールアドレス※複数の場合「;」で区切る)
・SUBJECT(件名)
・ログファイル配置先(絶対パス)
@echo off
SET MAIL_PS1="PowerShellファイル配置先パス"
SET from="差出人メールアドレス"
SET to="toメールアドレス"
SET cc="ccメールアドレス"
SET subject="件名"
SET logFile="ログファイル配置先パス"
rem powershell呼び出し
powershell -ExecutionPolicy RemoteSigned -Command %MAIL_PS1% %from% %to% %cc% %subject% %logFile%
rem メール配信確認
If %ERRORLEVEL% EQU 0 GOTO label_SEND_MAIL_OK
If %ERRORLEVEL% NEQ 0 GOTO label_SEND_MAIL_NG
:: =============送信OK
:label_SEND_MAIL_OK
echo "メールが正常に送信されました"
GOTO label_SEND_MAIL_END
:: =============送信NG
:label_SEND_MAIL_NG
echo "メール送信時にエラーが生じ、異常終了しました"
GOTO label_SEND_MAIL_END
:: =============処理終了
:label_SEND_MAIL_END
PowerShell側処理
bat側から受け取った値でメール作成、指定パスのログファイル内容を本文に書き出し送信する。
Param(
[string]$from #差出人
[string[]]$to #to(複数アドレス対応)
[string[]]$cc #cc(複数アドレス対応)
[string]$subject #件名
[string]$logFile #ログファイル配置先パス
)
$smtp = "SMTPサーバアドレス"
$port = "SMTPポート番号"
$SmtpClient = New-Object Net.Mail.SmtpClient($smtp,$port)
$Mail = New-Object Net.Mail.MailMessage
# 差出人
$Mail.From = $from
# TO
$to | foreach { $Mail.To.Add($_) }
# CC
$cc | foreach { $Mail.Cc.Add($_) }
# 件名
$Mail.Subject = $subject
# 本文 ログファイル内容を書き出す
body = (Get-Content $logFile) -as [string[]]
$i = 0
foreach($l in $body){
if($i -eq 0){
$Mail.body = $l
}else{
$Mail.Body = $Mail.Body += "`r`n + $l
}
$i++
}
$SmtpClient.Send($Mail)