FC2ブログ

【WSH】バッチ処理&メール通知

サーバで夜間バッチ処理を実行して結果をメールで送信

あるあるですが、今更ながら、、、
管理しているサーバで、夜間にWindowsバックアップやデータベースのバックアップ、その他夜間処理を実行して、結果をメールで送信したいなんて事、あると思います。
そんな時、私はWSH(Windows Script Host)を利用しています。(PowerShell覚える気が💦)
調べれば、色々な方のTipsが出てくるのですが、1から作るのが面倒という方用に(笑)

ご利用は自己責任でお願いしますm(__)m
コピペして動くことは無いので、コメントをよく見て下さい。
何処を直したらよいか分からない人は、WSHをまず勉強してみて下さいね♪


2020-04-10-01.jpg

・必要個所を変更し、「WindowsTask.vbs」など適当な名前を付けて、タスクスケジューラから実行して下さい。
・必要な処理数分だけバッチ処理を実行できます。
 それぞれの実行結果が、正常 or 異常 が分かります。
 異常の場合は、リターンコードも返します。
・実行結果や実行日時で、メールの宛先を変更できます。
・オマケで、サーバ内の各HDDドライブの利用率が分かります。
・以下のスクリプトを実行すると、↑こんな感じのメールが飛んできます。





↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

'******************************************************************************
'*
'* Copyright システム葵 All rights reserved.
'*
'* Module Name: WindowsTask.vbs
'*
'* Abstract: バッチプログラムを実行し、結果をメール送信する
'* ADD: arai
'* MOD:
'*
'******************************************************************************



'------------------------------------------------------------------------------
' 変数宣言強制
'------------------------------------------------------------------------------
Option Explicit



'------------------------------------------------------------------------------
' 変数宣言
'------------------------------------------------------------------------------

Dim C_MAIL_ConfigurationField
Dim C_MAIL_sendusing
Dim C_MAIL_smtpserver
Dim C_MAIL_smtpserverport
Dim C_MAIL_smtpusessl
Dim C_MAIL_smtpauthenticate
Dim C_MAIL_sendusername
Dim C_MAIL_sendpassword
Dim C_MAIL_smtpconnectiontimeout
Dim C_MAIL_From
Dim C_MAIL_To_List1
Dim C_MAIL_To_List2
Dim C_MAIL_To
Dim strMail_Subject
Dim strMail_Subject_Header
Dim strMail_Subject_Main
Dim strMail_Subject_Footer
Dim strMail_Body
Dim strMail_Body_Header
Dim strMail_Body_Main
Dim strMail_Body_Footer
Dim objMail
Dim objFso
Dim WshShell

Dim vbSunday '1 日曜
Dim vbMonday '2 月曜
Dim vbTuesday '3 火曜
Dim vbWednesday '4 水曜
Dim vbThursday '5 木曜
Dim vbFriday '6 金曜
Dim vbSaturday '7 土曜

Dim strComName
Dim strServerName
Dim strServerIP
Dim intRtnCode
Dim strPGName(2) ' 配列数は処理数で変えてね!
Dim strPGFullPath(2) ' 配列数は処理数で変えてね!
Dim blnErrFlg
Dim i, j



'------------------------------------------------------------------------------
' 変数準備
'------------------------------------------------------------------------------

' 自分のメール設定内容で書き換えて下さいね!
C_MAIL_ConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"
C_MAIL_sendusing = 2 ' 2(NTLM認証)
C_MAIL_smtpserver = "example.co.jp"
C_MAIL_smtpserverport = 587 ' SSL:465
C_MAIL_smtpusessl = False
C_MAIL_smtpauthenticate = 1
C_MAIL_sendusername = "example@example.co.jp"
C_MAIL_sendpassword = "xxxxxxxx"
C_MAIL_smtpconnectiontimeout = 30

' <と>は半角に直してね!
C_MAIL_From = "差出人名<example@example.co.jp>"
C_MAIL_To_List1 = "宛先1<example@example.co.jp>; 宛先2<example@example.co.jp>"
C_MAIL_To_List2 = "宛先1<example@example.co.jp>"

strComName = "システム葵"
strServerName = "SV-AOI-xxx"
strServerIP = "192.168.100.xxx"

' 処理名と処理プログラムの数は、宣言部の配列数で変更してね!
strPGName(0) = "Windowsバックアップ"
strPGName(1) = "DBバックアップ"
strPGName(2) = "xxxxx処理"
strPGFullPath(0) = "E:\Tools\Sub01\WindowsBackup.bat"
strPGFullPath(1) = "E:\Tools\Sub02\DB_Backup.bat"
strPGFullPath(2) = "E:\Tools\Sub03\xxxxx処理.vbs"

vbSunday = 1 '日曜
vbMonday = 2 '月曜
vbTuesday = 3 '火曜
vbWednesday = 4 '水曜
vbThursday = 5 '木曜
vbFriday = 6 '金曜
vbSaturday = 7 '土曜

'------------------------------------------------------------------------------
' 件名&本文準備
'------------------------------------------------------------------------------

strMail_Subject_Header = "【" & strComName & "(" & strServerName & "):"
strMail_Subject_Footer = "】バッチ処理実行結果(" & FormatDateTime(Now, 1) & ")"

strMail_Body_Header = strComName & " サーバ管理者 様" & vbCRLF
strMail_Body_Header = strMail_Body_Header & vbCRLF
strMail_Body_Header = strMail_Body_Header & "サーバのバッチ処理の実行結果をお送り致します。" & vbCRLF
strMail_Body_Header = strMail_Body_Header & vbCRLF
strMail_Body_Header = strMail_Body_Header & "【対象サーバ】" & vbCRLF & " " & strServerName & ":" & strServerIP & vbCRLF
strMail_Body_Header = strMail_Body_Header & vbCRLF
strMail_Body_Header = strMail_Body_Header & "【実行結果】" & vbCRLF

strMail_Body_Main= ""

strMail_Body_Footer = vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "※1.実行結果が正常でない場合、サーバ管理者にご連絡下さい。" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "※2.本メールは送信専用です。直接返信しないで下さい。" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "以上" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "■□■□■□■□■□■□■□■□■□■□" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "システム葵 新井 聡太 (Arai Souta)" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "〒189-0001" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "東京都東村山市秋津町5-4-47" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "Tel :042-399-0803 Fax :042-399-0804" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "Mail:arai@system-aoi.com" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "HP :http://www.system-aoi.com" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "Blog:http://systemaoi.blog.fc2.com/" & vbCRLF
strMail_Body_Footer = strMail_Body_Footer & "■□■□■□■□■□■□■□■□■□■□"



'------------------------------------------------------------------------------
' バッチプログラム実行
'------------------------------------------------------------------------------

' FileSystemObject オブジェクト作成
Set objFso = CreateObject("Scripting.FileSystemObject")

' WshShellオブジェクト作成
Set WshShell = WScript.CreateObject("WScript.Shell")

' Errフラグ:初期化
blnErrFlg = False

' ■ バッチプログラム実行
For i = 0 To UBound(strPGName)

j = i + 1
strMail_Body_Main= strMail_Body_Main& " " & j & "." & strPGName(i) & ":"

' ■ プログラムファイルが存在チェック
If objFso.FileExists(strPGFullPath(i)) Then

' ■ バッチプログラム実行
intRtnCode = WshShell.Run(strPGFullPath(i), 0, True)

Select Case intRtnCode
Case 0 ' 正常
strMail_Body_Main= strMail_Body_Main& "正常終了" & vbCRLF
Case Else ' 異常
blnErrFlg = True
strMail_Body_Main= strMail_Body_Main& "異常終了(" & intRtnCode & ")" & vbCRLF
End Select
Else
blnErrFlg = True
strMail_Body_Main= strMail_Body_Main& "異常終了…ファイルが存在しません" & vbCRLF
End If

Next

If Not blnErrFlg Then
strMail_Subject_Main = "正常"
Else
strMail_Subject_Main = "異常"
End If


' C_MAIL_To_List1:エラー発生時 or 毎週月曜日
' C_MAIL_To_List2:通常 and 正常
If Weekday(Now) = vbMonday Or blnErrFlg Then
C_MAIL_To = C_MAIL_To_List1
Else
C_MAIL_To = C_MAIL_To_List2
End IF


' オブジェクトを開放する
Set WshShell = Nothing

' オブジェクトを開放する
Set objFso = Nothing



'------------------------------------------------------------------------------
' HDD利用状況取得
'------------------------------------------------------------------------------

strMail_Body_Main = strMail_Body_Main & vbCRLF & "【HDD利用状況】"
' ディスク情報取得
GetDrivesInfoByType strMail_Body_Main



'------------------------------------------------------------------------------
' 件名&本文作成
'------------------------------------------------------------------------------

strMail_Subject = strMail_Subject_Header & strMail_Subject_Main & strMail_Subject_Footer
strMail_Body = strMail_Body_Header & strMail_Body_Main & strMail_Body_Footer




'------------------------------------------------------------------------------
' 結果送信(変更不要)
'------------------------------------------------------------------------------

'[SSL通信をする/しない]  smtpusessl  = True/Flase
'[SMTP認証]  smtpauthenticate  = 1(Basic認証)/2(NTLM認証)
'[送信ユーザー名]  sendusername  = ユーザー名
'[送信パスワード]  sendpassword  = パスワード
'[タイムアウト]  smtpconnectiontimeout  = 接続がタイムアウトするまでの秒数

Set objMail = CreateObject("CDO.Message")

objMail.From = C_MAIL_From
objMail.To = C_MAIL_To
objMail.Subject = strMail_Subject
objMail.TextBody = strMail_Body

With objMail.Configuration.Fields
.Item(C_MAIL_ConfigurationField & "sendusing") = C_MAIL_sendusing
.Item(C_MAIL_ConfigurationField & "smtpserver") = C_MAIL_smtpserver
.Item(C_MAIL_ConfigurationField & "smtpserverport") = C_MAIL_smtpserverport
.Item(C_MAIL_ConfigurationField & "smtpusessl") = C_MAIL_smtpusessl
.Item(C_MAIL_ConfigurationField & "smtpauthenticate") = C_MAIL_smtpauthenticate
.Item(C_MAIL_ConfigurationField & "sendusername") = C_MAIL_sendusername
.Item(C_MAIL_ConfigurationField & "sendpassword") = C_MAIL_sendpassword
.Item(C_MAIL_ConfigurationField & "smtpconnectiontimeout") = C_MAIL_smtpconnectiontimeout
.Update
End With

objMail.Send

Set objMail = Nothing



'------------------------------------------------------------------------------
' プログラム終了
'------------------------------------------------------------------------------

WScript.Quit





'------------------------------------------------------------------------------
' ディスク情報取得
'------------------------------------------------------------------------------

Function GetDrivesInfoByType(ByRef strRet)
'WMIにて使用する各種オブジェクトを定義・生成する。
Dim oClassSet
Dim oClass
Dim oLocator
Dim oService
Dim sMesStr
Dim intHDD_Rate
Dim intHDD_Use
Dim intHDD_All

'ローカルコンピュータに接続する。
Set oLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set oService = oLocator.ConnectServer
'クエリー条件を WQL にて指定する。
Set oClassSet = oService.ExecQuery("Select * From Win32_LogicalDisk Where DriveType=3")

'コレクションを解析する。
For Each oClass In oClassSet
With oClass
intHDD_Rate = Round(((.Size - .FreeSpace)/.Size) * 100)
intHDD_Use = FormatNumber((.Size - .FreeSpace)/1024/1024/1024)
intHDD_All = FormatNumber(.Size/1024/1024/1024)

sMesStr = sMesStr & _
" ・" & .Name & " " & _
"利用率:" & Space(3 - Len(intHDD_Rate)) & intHDD_Rate & " % 【" & _
" 利用量:" & intHDD_Use & " GB /" & _
" 全容量:" & intHDD_All & " GB 】" & vbCrLf

End With
Next

strRet = strRet & vbCRLF & sMesStr & vbCRLF

'使用した各種オブジェクトを後片付けする。
Set oClassSet = Nothing
Set oClass = Nothing
Set oService = Nothing
Set oLocator = Nothing
End Function
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑



【宣伝・・・(*´ω`)】

タイトルロゴ3

 システム葵では、個人様向けでも企業様向けでも、パソコン修理から、パソコン設定、パソコンの使い方、LAN環境構築、ソフトウェア開発まで、様々な実績がありますので、困ったことがあれば、お気軽にご相談下さい。

テーマ : パソコンサポート
ジャンル : コンピュータ

検索フォーム
最新記事
カテゴリ
全記事表示リンク

全ての記事を表示する

最新コメント
プロフィール

ITLife

Author:ITLife
システム葵新井聡太です。
東京都東村山市に生まれ、ここで育ち、ここで結婚し、システムエンジニア一筋で十数年やってきました。
ここでは主に、パソコンを中心にITに関わることを備忘録として残していきたいと思います。
少しでも来ていただいた方のお役に立てたら幸いです。
m(_ _)m

p.s
ここで紹介している内容は一例です。すべては、自己責任でお願いします。

カレンダー
05 | 2020/06 | 07
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 - - - -
訪問数
月別アーカイブ
リンク