ドライブの使用容量と空き容量を取得する
Get-PSDrive 、Get-Volume、Get-WmiObject、Get-CimInstance コマンドを使ってドライブ情報を取得します。
単純に Get-PSDrive コマンドを使う
PS C:\tmp\rec> Get-PSDrive
下記が実行結果です。Used が使用容量です、Free が空き容量です。
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
Alias Alias
C 185.63 40.15 FileSystem C:\ tmp\rec
Cert Certificate \
D 9.44 0.92 FileSystem D:\
E 865.38 1929.13 FileSystem E:\
Env Environment
F 796.43 1066.46 FileSystem F:\
Function Function
G 2691.87 102.64 FileSystem G:\
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
X FileSystem X:\
Get-PSDrive コマンドで任意のドライブ情報だけ取得する
C: ドライブだけが知りたければ引数に c を与えます。c: (シーコロン)だとエラーになります。
PS C:\tmp\rec> Get-PSDrive c
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
C 185.63 40.15 FileSystem C:\
Get-PSDrive コマンドで複数のドライブ情報を取得する
C: E: F: G: ドライブが知りたければ引数に c, e, f, g を与えます。
PS C:\tmp\rec> Get-PSDrive c, e, f, g
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
C 185.63 40.15 FileSystem C:\ tmp\rec
E 865.38 1929.13 FileSystem E:\
F 796.43 1066.46 FileSystem F:\
G 2691.87 102.64 FileSystem G:\
ドライブの使用率を取得する
例えば、C: ドライブの使用率を求める場合は下記のスクリプトを使うのがいいでしょう。
$drive_letter = "c"
# ドライブ情報を取得する.
$drv = Get-PSDrive $drive_letter
# ドライブの空き容量と使用量を加算して総容量を知る.
$total = ( $drv.Free + $drv.Used )
# 使用率を計算する.
$rate = ( $drv.Used ) / $total
# パーセントにして整数化する.
$rate_percent = [int]( $rate * 100.0 )
$v0 = $drv.Free
$v1 = $drv.Used
$v2 = $total
"Drive {0}" -f $drive_letter
"{0} bytes Free" -f $v0
"{0} bytes Used" -f $v1
"{0} bytes Total" -f $v2
"{0}%" -f $rate_percent
Write-Host( "`r" )
# KB 単位.
$v0_kb = [int]( $v0 / 1000.0 )
$v1_kb = [int]( $v1 / 1000.0 )
$v2_kb = [int]( $v2 / 1000.0 )
"{0} KB free" -f $v0_kb
"{0} KB used" -f $v1_kb
"{0} KB total" -f $v2_kb
Write-Host( "`r" ) # 空行挿入.
# MB 単位.
$v0_mb = [int]( $v0_kb / 1000.0 )
$v1_mb = [int]( $v1_kb / 1000.0 )
$v2_mb = [int]( $v2_kb / 1000.0 )
"{0} MB free" -f $v0_mb
"{0} MB used" -f $v1_mb
"{0} MB total" -f $v2_mb
Write-Host( "`r" ) # 空行挿入.
# GB 単位.
$v0_gb = [int]( $v0_mb / 1000.0 )
$v1_gb = [int]( $v1_mb / 1000.0 )
$v2_gb = [int]( $v2_mb / 1000.0 )
"{0} GB free" -f $v0_gb
"{0} GB used" -f $v1_gb
"{0} GB total" -f $v2_gb
Write-Host( "`r" ) # 空行挿入.
下記が実行結果です。
Drive c
43080957952 bytes Free
199351382016 bytes Used
242432339968 bytes Total
82%
43080958 KB free
199351382 KB used
242432340 KB total
43081 MB free
199351 MB used
242432 MB total
43 GB free
199 GB used
242 GB total
単純に Get-Volume コマンドを使う
Get-Volume は実行速度が遅いです。Get-PSDrive は一瞬で情報が表示されますが、Get-Volume は、ややこしいことをやっているのでしょうか。
PS C:\tmp\rec> Get-Volume
下記が実行結果です。Size が使用容量です。SizeRemaining が空き容量です。
Healthy というメンバがありますね。ディスクの健康を調べているから実行速度が遅いのでしょうか...
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining Size
----------- ------------ -------------- --------- ------------ ----------------- ------------- ----
F ボリューム NTFS Fixed Healthy OK 1.04 TB 1.82 TB
Windows RE Tools NTFS Fixed Healthy OK 703.88 MB 1023 MB
X Unknown CD-ROM Healthy Unknown 0 B 0 B
SYSTEM FAT32 Fixed Healthy OK 278.01 MB 356 MB
C Windows NTFS Fixed Healthy OK 40.15 GB ...8 GB
D Recovery Image NTFS Fixed Healthy OK 942.03 MB ...6 GB
NTFS Fixed Healthy OK 387 MB 875 MB
G ボリューム NTFS Fixed Healthy OK 102.64 GB 2.73 TB
E ボリューム NTFS Fixed Healthy OK 1.88 TB 2.73 TB
Get-Volume で任意のドライブ情報を取得する
C: ドライブだけが知りたければ引数に c を与えます。
PS C:\tmp\rec> Get-Volume c
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining Size
----------- ------------ -------------- --------- ------------ ----------------- ------------- ----
C Windows NTFS Fixed Healthy OK 40.15 GB 225.78 GB
Get-Volume コマンドで複数のドライブ情報を取得する
C: E: F: G: ドライブが知りたければ引数に c, e, f, g を与えます。
PS C:\tmp\rec> Get-Volume c, e, f, g
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining Size
----------- ------------ -------------- --------- ------------ ----------------- ------------- ----
F ボリューム NTFS Fixed Healthy OK 1.04 TB 1.82 TB
C Windows NTFS Fixed Healthy OK 40.15 GB 225.78 GB
G ボリューム NTFS Fixed Healthy OK 102.64 GB 2.73 TB
E ボリューム NTFS Fixed Healthy OK 1.88 TB 2.73 TB
単純に Get-WmiObject を使う
パソコンに接続されている物理ドライブの情報だけを取り出すのは、Get-WmiObject コマンドに引数 Win32_LogicalDisk を指定するのが簡単だと思います。
PS C:\tmp\rec> Get-WmiObject Win32_LogicalDisk
DeviceID : C:
DriveType : 3
ProviderName :
FreeSpace : 43107921920
Size : 242432339968
VolumeName : Windows
DeviceID : D:
DriveType : 3
ProviderName :
FreeSpace : 987791360
Size : 11119095808
VolumeName : Recovery Image
DeviceID : E:
DriveType : 3
ProviderName :
FreeSpace : 2071384539136
Size : 3000574668800
VolumeName : ボリューム
DeviceID : F:
DriveType : 3
ProviderName :
FreeSpace : 1145107042304
Size : 2000263573504
VolumeName : ボリューム
DeviceID : G:
DriveType : 3
ProviderName :
FreeSpace : 110206095360
Size : 3000574668800
VolumeName : ボリューム
DeviceID : X:
DriveType : 5
ProviderName :
FreeSpace :
Size :
VolumeName :
物理ドライブのドライブレターを取得する
Get-WmiObject で得られるオブジェクトを ForEach-Object へパイプで流し、必要なメンバだけ表示します。
PS C:\tmp\rec> Get-WmiObject Win32_LogicalDisk | ForEach-Object{ $_.DeviceID }
下記が実行結果です。
C:
D:
E:
F:
G:
X:
Get-CimInstance コマンドでドライブ情報を取得する
上記の Get-WmiObject だと、光学ディスクドライブの情報まで取得されてしまいます。HDD や SSD だけに限定したい場合は Get-CimInstance コマンドに -Filter オプションで "DriveType=3" を指定します。
PS C:\Users\tytk> Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3"
下記が実行結果です。
DeviceID DriveType ProviderName VolumeName Size FreeSpace
-------- --------- ------------ ---------- ---- ---------
C: 3 Windows 242432339968 35522768896
D: 3 Recovery Image 11119095808 994324480
E: 3 ボリューム 3000574668800 2063691669504
F: 3 ボリューム 2000263573504 1145107042304
G: 3 ボリューム 3000574668800 96838475776
FreeSpace メンバと、Size メンバを使えばディスク使用率が計算できますね。