ドライブの使用容量と空き容量を取得する

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 メンバを使えばディスク使用率が計算できますね。