Windowsマシンでディスク容量を確認するのは、ボックスをクリックするだけという単純な作業ではありません。特にリモートサーバーを扱っている場合や、自動アラートを利用したい場合はなおさらです。この記事では、PowerShellとWMIを使ってディスク情報を取得する方法について詳しく説明します。PowerShellとWMIは便利なツールですが、どこから始めれば良いのか分からないと、操作が複雑になることがあります。また、容量が少なくなった際にポップアップやメールで警告が表示されるように設定したい場合は、スクリプトが役立ちます。そのため、コマンドを理解し、自分の環境に合わせて調整することで、後々の面倒な作業を大幅に軽減できます。
PowerShell を使用して Windows のディスク領域を修正および表示する方法
PowerShell でローカルのドライブの空き容量を確認する
この方法は、ドライブの空き容量をざっと確認したい場合に最適です。論理ドライブに関する情報を保持するWin32_LogicalDiskGet-WmiObject WMIクラスを活用します。またはその最新の代替手段を実行すると、その情報がシェルに取り込まれます。「PowerShell Coreではサポートされていません」と表示された場合は、にGet-CimInstance切り替えてください。出力にはドライブのサイズ、空き容量、およびパーセンテージが含まれるため、何が使用されているかがわかりやすくなります。Get-WmiObjectGet-CimInstance
コマンドは次のとおりです:
Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property DeviceID, VolumeName, @{Label='FreeSpace (Gb)'; expression={($_. FreeSpace/1GB).ToString('F2')}}, @{Label='Total (Gb)'; expression={($_. Size/1GB).ToString('F2')}}, @{label='FreePercent'; expression={[Math]::Round(($_. FreeSpace/ $_. Size)*100, 2)}} | Format-Table -AutoSize
プロのヒント:空き容量の割合に注意してください。設定によっては、ドライブが実際にはいっぱいであっても、このレポートには数千GBの空き容量が表示されることがあります。これは、ディスク構成の不備やデータの誤報告が原因である可能性があります。何かおかしい点がある場合は、必ずディスク管理ツールで確認してください。
ディスク容量が不足したときに自動アラートを設定する
スクリプトを常に手動で実行することに抵抗がない限り、このスクリプトを実行してアラートを送信するタスクをスケジュール設定しておくと非常に便利です。Wscript. Shell を使ってポップアップを表示したり、 を使ってメールを送信するようにスクリプトを調整できます。こうSend-MailMessageすることで、ドライブの空き容量が例えば 20% を下回ったときに、すぐに通知が届きます。ダッシュボードの警告のようなものですが、自動化されています。
以下は、スペースをチェックし、しきい値を下回っている場合にメッセージを表示するスニペットの例です。
$percentWarning = 20 $percentCritical = 5 $disks = Get-WmiObject -Class Win32_LogicalDisk foreach ($disk in $disks) { if ($disk. Size -ne $null) { $freePercent = [Math]::Round(($disk. FreeSpace / $disk. Size) * 100, 2) if ($freePercent -lt $percentWarning) { $message = "Warning: Disk $($disk. DeviceID) has only $freePercent% free" if ($freePercent -lt $percentCritical) { $message = "CRITICAL! Disk $($disk. DeviceID) almost full!" } $wshell = New-Object -ComObject Wscript. Shell $wshell. Popup($message, 10, "Disk Space Alert", 64) } } }
この小さなスクリプトはポップアップを表示しますが、メールアラートを送信したり、タスクスケジューラを使ってスケジュール実行したりするようにカスタマイズできます。ただし、システムが混雑していたり、リモート接続が不安定だったりすると、ポップアップがすぐに表示されない場合がありますので、期待しないでください。
空き容量が少ないときにメールを送信する
ポップアップによるアラートだけでは不十分な場合は、メールを送信する方が賢明です。特に複数のサーバーを管理している場合は効果的です。SMTPサーバーの情報を に入力するだけですSend-MailMessage。セキュリティが厳しい場合は、専用のアカウントを作成する必要があるかもしれません。スクリプトを実行すると、ディスク容量がしきい値を下回るたびにメールが送信されます。
サンプルコマンドスニペット:
Send-MailMessage -To "[email protected]" -From "[email protected]" -Subject "Low Disk Space Alert on $env:computername" -Body "Disk $($disk. DeviceID) only has $($disk. FreeSpace/1GB) GB free." -SmtpServer smtp.yourprovider.com -Port 587 -Credential (Get-Credential) -UseSsl
注: 認証情報をハードコードするか安全に保存しない限り、認証情報の入力を求められます。あまり良い方法ではありませんが、簡単なテストには有効です。
PowerShellでリモートディスクの空き容量を確認する方法
複数のサーバーを管理している場合、各マシンに直接アクセスするのではなく、リモートでチェックを実行したいと考えるでしょう。Invoke -Command を使えば、まさにそれが実現できます。チェックスクリプトを記述すれば、権限と WinRM が適切に設定されている限り、WSMan 経由でリモートホスト上で実行されます。
簡単な例を以下に示します。
Invoke-Command -ComputerName server1, server2 -ScriptBlock { Get-WmiObject -Class Win32_LogicalDisk | Select-Object DeviceID, FreeSpace, Size }
または、Active Directory から取得する場合は、サーバーのリストを取得し、各サーバーをループ処理することができます (バッチ チェックのようなものです)。
$servers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows Server*" -and enabled -eq $true').Name foreach ($server in $servers) { Invoke-Command -ComputerName $server -ScriptBlock { Get-WmiObject -Class Win32_LogicalDisk | Select-Object DeviceID, FreeSpace, Size } }
もう1つの選択肢はRemoteWMIを使うことです。これは、特にファイアウォールや権限設定などで少し扱いにくい場合がありますが、一度試してみたところうまくいきました。ただし、大規模な監視にはZabbixやNagiosといったツールの方が信頼性が高く、拡張性も高い場合があることを覚えておいてください。
正直なところ、適切な権限とスケジュール設定で正しく設定しないと、重要なディスクのチェックを忘れてしまい、システムに問題が生じる可能性があります。そのため、PowerShell で自動化し、定期的なチェックを少し実行することは理にかなっています。
まとめ
このアプローチは非常に柔軟で、迅速なローカルチェック、リモートサーバー監視、アラートの自動化といった機能が備わっています。基本的な手動チェックとセミプロレベルの自動化を組み合わせたようなもので、日常的なシナリオの多くには十分です。ただし、環境には注意してください。一部のコマンドは管理者権限が必要になる場合があります。特にサーバーやリモートマシンではなおさらです。PowerShellスクリプトは予期せぬ事態を引き起こすこともありますが、その反面、ディスク管理であれこれクリックしてうまくいくことを期待するよりもはるかに強力です。
まとめ
Get-CimInstanceまたは を使用しGet-WmiObjectてドライブ情報を確認します。- スペースが不足しているときにポップアップや電子メールを送信するスクリプトを設定します。
- タスク スケジューラを使用して自動化するか、を使用してリモート チェックを実行します
Invoke-Command。 - 大規模な監視の場合は、Zabbix や Nagios などの専用ツールを検討してください。
最終まとめ
これが、ディスク容量をモニタリングするための良い出発点になれば幸いです。調整はたくさん必要ですが、正しく設定できれば、後でパニックに陥る可能性を大幅に減らすことができます。誰かの時間を節約したり、ドライブのクラッシュを防いだりするのに役立つことを願っています!