【bat、Powershell】(サーバ保守)ディスク容量監視、メール送信

【ツールの概要】
・batとPowerShellでサーバの容量を定時チェックしてメールで内容を見ようというもの。
・bat内でJavaScriptを利用しています。(参考ページの記事に感謝!)

【環境(使っている環境)】
・Windows10Pro or Windows Server2012
Powershell ver2.0以降


【ソース(CapChStart.bat)】

@echo off 
cd /d %~dp0

SET WKFOL=%~dp0
SET LOGFILE=%WKFOL%GetCapMail.log
SET OUTPUT=%WKFOL%GetCap.txt
SET GETPRG=%WKFOL%CapCheck.bat
SET PSFILE=%WKFOL%CapacitySendMail.ps1

REM 出力ファイル確認
If not exist %LOGFILE% ( echo. > %LOGFILE% )
If not exist %OUTPUT% ( echo. > %OUTPUT% )

Call %GETPRG% > %OUTPUT%

Timeout /T 2

echo %ERRORLEVEL% >> %LOGFILE%
REM 出力結果をPowershellで読込み送信する
powershell -ExecutionPolicy RemoteSigned -Command "%PSFILE% %OUTPUT%"

 
【ソース(CapacitySendMail.ps1)】

#param
Param($Bodyfilepath)
$scriptPath = $MyInvocation.MyCommand.Path
$To = "~宛先~"
$From = "~ふろむ~"
$Cc = "~しーしー~"
$Body=(Get-Content -Path $Bodyfilepath) -join "`r`f"

$todayymd=Get-Date -Format "yyyyMMdd"
$Subject = [string]::Concat("[SERVER03] Disk Capacity Report ", $todayymd)
$MailSv = "~SMTPサーバパス~"
$Port = 2525 #これも例
$userId = "~SMTPサーバID~"
$pwd = "~SMTPサーバパスワード~" | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $userId,$pwd
$Encode = [System.Text.Encoding]::UTF8
$scriptfol = Split-Path $MyInvocation.MyCommand.Path -Parent
$logfile = $scriptfol+ "\SendCapMail.log"

try{
#Send Mail
Send-MailMessage `
    -To $To `
    -From $From `
    -Cc $Cc `
    -SmtpServer $MailSv `
    -Credential $cred `
    -UseSsl `
    -Encoding $Encode `
    -Port $Port `
    -Subject $Subject `
    -Body $Body `
    -ErrorAction stop

$Now=Get-Date -Format "yyyy/MM/dd_HH:mm:ss"
echo `r`nDate`t$Now,Body`t$Body | Add-Content $logfile -Encoding UTF8

}catch{
$Now=Get-Date -Format "yyyy/MM/dd_HH:mm:ss"
echo `r`nDate`t$Now | Add-Content $logfile -Encoding UTF8
$error[0] | Out-String | Add-Content $logfile -Encoding UTF8
}

【使用方法】
・CapCheck.batを上記二つのほかに作成し、下記参考リンク先のbat本文を丸々保存します。
・3つのスクリプトを全て同じフォルダに置き、CapChStart.batを引数なしで実行します。

【説明】
・それぞれログが吐かれます。一番必要な情報はSendCapMail.logに吐かれていると思います。
・あとはこれをタスクスケジューラに登録すると。
Powershellのコードは以前より使っているモノのアレンジです。

【総評】
サーバ(簡易的なファイルサーバ)の容量監視は中々これといったものがない。
有料ツールとか使えば、閾値超えたらメールとかできるのですが、なかなか政治的に難しかったり。
また以下コマンドでもそれぞれの容量は取れなくはないです。うまく使えばjavascriptに頼らなくていいかも?でも素晴らしいコードがあったのでつい←感謝

wmic logicaldisk list brief 

【参考リンク】
Windowsでディスク使用率等の一覧を出力するバッチファイルを書いた - hogehoge @teramako