Windows環境では、サーバーや共有フォルダの空き容量を定期的に監視し、容量不足を早期に検知することが重要です。PowerShellを使えば、指定ドライブの空き容量をチェックし、しきい値を下回った場合に通知を出すスクリプトを簡単に構築できます。この記事では、監視スクリプトの実装例と通知方法を紹介します。
基本的な空き容量チェックの方法
Get-PSDrive
や Get-CimInstance
を使ってドライブの空き容量を取得できます。
Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" |
Select-Object DeviceID, @{Name="FreeGB";Expression={"{0:N1}" -f ($_.FreeSpace / 1GB)}}, @{Name="TotalGB";Expression={"{0:N1}" -f ($_.Size / 1GB)}}
空き容量が少ない場合に通知するスクリプト
$threshold = 10 # GB単位でのしきい値
$drives = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3"
foreach ($drive in $drives) {
$freeGB = [math]::Round($drive.FreeSpace / 1GB, 1)
if ($freeGB -lt $threshold) {
$message = "警告: ドライブ $($drive.DeviceID) の空き容量が ${freeGB}GB です。"
Write-Output $message
# ポップアップ通知
$wshell = New-Object -ComObject Wscript.Shell
$wshell.Popup($message, 0, "空き容量警告", 48)
}
}
しきい値以下のドライブがあれば、警告メッセージとともにポップアップを表示します。
複数台のPC・サーバーに対してリモート監視するには
リモートからWMIで情報取得する例:
$computers = @("Server01", "Server02")
foreach ($name in $computers) {
try {
$drives = Get-CimInstance Win32_LogicalDisk -ComputerName $name -Filter "DriveType=3"
foreach ($drive in $drives) {
$freeGB = [math]::Round($drive.FreeSpace / 1GB, 1)
if ($freeGB -lt 10) {
Write-Output "$name の $($drive.DeviceID) は残り ${freeGB}GB"
}
}
} catch {
Write-Error "$name に接続できません: $_"
}
}
ログファイルに出力する場合
$log = "C:\Logs\drive_check_log.txt"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path $log -Value "`n[$timestamp] ドライブ監視結果"
foreach ($drive in $drives) {
$freeGB = [math]::Round($drive.FreeSpace / 1GB, 1)
$line = "$($drive.DeviceID): ${freeGB}GB free"
Add-Content -Path $log -Value $line
}
定期的に監視するには
Windowsの「タスクスケジューラ」でこのスクリプトをバッチ(.ps1)として登録することで、毎日や毎時の定期監視が可能です。タスクには「PowerShell実行ポリシーをバイパス」設定も忘れずに追加します:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\DriveCheck.ps1"
まとめ
PowerShellを使えば、ドライブの空き容量を簡単に監視でき、不足時に自動で警告を出す仕組みを構築できます。通知形式はポップアップのほか、ログ出力・メール送信・Teams/Slack通知などに拡張することも可能です。システム停止やファイル保存エラーを未然に防ぐためにも、定期的な容量監視の自動化をおすすめします。