毎日決まった時間に、日次バッチの完了メールが届いているかを確認するルーチンワークがありました。
さすがにこれを人間がやるのは平成の働き方を引きずり過ぎているので、自動化を試みました。
方針としては、以下の手順で実現します。
①Outlookの受信トレイを確認する処理を実装する ← PowerShell
②決まった時間に①を呼び出す ← タスクスケジューラ
バッチ完了メールが届いていない場合、全体周知用のメールを送るのですが
そのための下書きを自動作成する処理も含んでいます。
①のスクリプトがこちら
# タスクスケジューラで毎朝09:02:30に本スクリプトを起動する
#Outlookアプリケーションを取得
$Outlook = New-Object -ComObject Outlook.Application
$Namespace = $Outlook.GetNamespace("MAPI")
#受信トレイを取得
$Inbox = $Namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
#検索条件
$yesterday = Get-Date (Get-Date).addDays(-1) -Format "yyyyMMdd"
$subject = "件名"+ $yesterday
$sender = "test@test.jp"
$found = $false
$notFoundMsg = ""
#受信トレイ内の各メールの件名と宛先を確認する。
foreach ($item in $Inbox.Items){
if($item.Subject -eq $subject -and $item.SenderEmailAddress -eq $sender){
$found = $true
break
}
}
if($found){
Write-Host "◯「$subject」"
} else {
Write-Host "×「$subject」"
$notFoundMsg += "×「$subject」`r`n"
}
$found = $false
#メール不達の場合
if($notFoundMsg -ne ""){
$notFoundMsg += "`r`n`r`n日次バッチ未完了メールの下書きを作成しますか?"
# メッセージボックスを表示
$WS = New-Object -com Wscript.Shell
$result = $WS.Popup($notFoundMsg, 30, "確認", 4)
#日次バッチ未完了メールの下書きを作成
if($result -eq 6){
$mail = $Outlook.CreateItem(0)
$mail.Subject = "タイトル"
$mail.Body = "関係者各位`r`n`r`n`r`n"
$mail.Body += "いつもお世話になっております。`r`n`r`n"
$mail.Body += "◯◯部の**です。`r`n`r`n`r`n"
$mail.Body += "あいうえおかきくけこ`r`n`r`n"
$mail.Body += "どうぞよろしくお願いいたします。`r`n"
$mail.save()
$inspector = $mail.GetInspector
$inspector.Display()
}
}
#メールが正常に届いていた場合
else {
$today = Get-Date -Format "M/d"
Write-Host ""
Write-Host ""
Write-Host $today
Write-Host "$subject"
Write-Host ""
Write-Host "確認済み。"
}
#30秒経過で画面を閉じる
Start-Sleep -Seconds 30
タスクスケジューラへの登録手順は割愛します。