WMIを使ってディスク容量を表示してみる

Windowsでdfみたいなのってどうやるの?ていうのが分かんなかったので調べてみた。Windows Script HostからWBEM*1ロケータていう形のオブジェクトを叩いてSQLのサブセットであるWQLていうのを発行すればおk。らしい。なるほど、さっぱり分からん。

Set args = WScript.Arguments
Const HARD_DISK = 3
host = args.item(0)
user = args.item(1)
pass = args.item(2)
Set locator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = locator.ConnectServer(host, "", user, pass)
Set disks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK)
WScript.Echo "IP-Address" & vbTab & "Drive" & vbTab & "FreeSpace" & vbTab & "TotalSpace"
For Each disk in disks
  WScript.Echo host & vbTab & disk.DeviceID & vbTab & disk.FreeSpace & vbTab & disk.Size
Next

てきとうな名前(拡張子はvbsで)で保存して、コマンドプロンプトからcscriptで起動する。

C:\Users\USER>cscript //nologo df.vbs 192.168.2.21 "" ""
IP-Address      Drive   FreeSpace       TotalSpace
192.168.2.21    C:      79880331264     147981332480
192.168.2.21    D:      425829195776    480092614656
192.168.2.21    Q:      5028798464      10485755904
192.168.2.21    S:      706224128       1571811328

ローカルホストで使うときはこういうふうにユーザIDとパスワードを空指定する。
あ、リモートでも使えるかは確認してません><*2 *3 WMIさえ動けば動くはずなので、バージョン的にはWindows2000以降のどんなWindowsでも動くらしい。

*1:Web-Based Enterprise Management

*2:(9月6日追記)リモートでも使えました。

*3:(9月8日追記)リモートでも使えたけど、Administratorだとオッケーで、管理者権限を持ってるAdministrator以外のIDだとダメだった。どっかに設定があるのかな。