WMIでサーバのディスク空き容量を一斉に取得してみた
サーバのディスク空き容量を知りたい、という要望があるものの
台数が多いと個々にログインして調べるのが手間なので一斉にできないかなーってことで
ちょろっと書いてみた。
ドメイン環境向けなので、1種類のユーザで指定された全部のサーバに接続にいきます。
また、ドライブレターの割り当てのない個所にマウント(ジャンクション)されているディスクについてはLogicalDiskの列挙で取れないのでそこは対応できてません。
あと、読みやすくするため手抜きのためエラー処理は入ってません。
Excelで開く前提でCSV出力にしてるけど、そもそもExcelのマクロに組み込んだ方が運用ツールとしては使いやすくなると思います。
以下、スクリプト
'GetAllServerAllDiskSpace.vbs 'スクリプト内で指定されたサーバの全てのディスク空き容量を列挙して取得する。 '出力フォーマットはCSV固定。 '------------------------------ 'サーバに接続するユーザ、パスワードを変更する時は以下を編集 '↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Const USERNAME="Domain\Username Const PASSWORD="Password" '↑↑↑↑↑↑↑↑↑↑↑↑↑↑ '------------------------------ Dim nodeArray Dim curNode Dim tmpstr Dim Qfeset Dim Qfe Dim Locator Dim Service '------------------------------ '処理対象ノードを変更追加する場合は、以下を変更追記。 '↓↓↓↓↓↓↓↓↓↓↓↓↓↓ nodeArray = Array("Server1","Server2","Server3","Server4") '↑↑↑↑↑↑↑↑↑↑↑↑↑↑ '------------------------------ 'Initialize Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator") On Error Resume Next 'Output Header WScript.Echo("実行日時:" & Now() ) WScript.Echo("?:, ドライブ種別, 空容量(GB), 総容量(GB)") 'Main Process Loop Unit is 1Node For Each curNode in nodeArray 'Connecting Node Set Service = Locator.ConnectServer( curNode, "root\cimv2", USERNAME, PASSWORD ) ' Set Service = Locator.ConnectServer ' For Debug. Connect Local ' Get Node LogicalDisk Infomation Set Qfeset = Service.ExecQuery("Select * From Win32_LogicalDisk") 'Make Output String and Output WScript.Echo("") WScript.Echo( curNode ) For Each Qfe in Qfeset tmpstr = Qfe.DeviceID & ", " & Qfe.DriveType & ", " & INT(Qfe.FreeSpace/1024/1024/1024)+1 & ", " & INT(Qfe.Size/1024/1024/1024)+1 WScript.Echo( tmpstr ) Next Next WScript.Echo("") WScript.Echo("ドライブ種別凡例: 3->ハードディスク 4->ネットワーク接続ドライブ 5->光学ドライブ") 'Terminate Set Service = Nothing Set Qfeset = Nothing