【ツールの概要】
・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