PowerShellを使ってシステムのディスクサイズや空き領域サイズなどをリモートから調査するTech TIPS

PCを管理するために、ディスクのサイズや空きサイズなどを調べたいことがあるだろう。多くのリモートPCを調査するなら、PowerShellやコマンドプロンプト上で動作するCUIのツールを使うと便利だ。その方法をまとめておく。

» 2018年08月03日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 8.1/Windows 10/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016


 コンピュータの運用管理などを行う場合、そのコンピュータにどのようなディスクドライブ(C:やD:などのボリューム)があって、そのディスクサイズや空き容量が幾らか、ということを知りたいことがある。ローカルのPCならエクスプローラを起動すれば簡単に分かるだろうが、リモートのコンピュータの場合はどうすればよいだろうか?

 リモートデスクトップでサインイン(ログイン)して調べたり、[コンピュータの管理]ツールでリモート接続して調べたりすればよいだろうが、台数が多いと面倒だ。しかも1回だけでなく、定期的に何度も調査するとなると、例えばコマンドラインで使えるCUIのツールを用意しておくと便利だ。

 CUIで、リモートからディスク(ボリューム)のサイズを調査するには幾つか方法があるが、ここではPowerShellを使う方法を紹介する。WMI(wmic)を使う方法もあるが、それについては今後別TIPSで取り上げる。

PowerShellでディスクの状態を調べる

 PowerShellでディスク(ボリューム)の総サイズや空き領域を調べるコマンドレットとしては、「Get-PSDrive」と「Get-Volume」の2つがある。

Get-PSDriveコマンドレットでドライブの状態を調査する

 Get-PSDriveコマンドレットは、ローカルに接続されている「ドライブ」の概要情報を表示するためのコマンドである。C:やD:といった物理的なドライブだけでなく、リモートのサーバ(のファイル共有)をマウントしているネットワークドライブや、レジストリや環境変数のような擬似的な(PowerShellの)ドライブも表示する。

Get-PSDriveでドライブ情報を取得する Get-PSDriveでドライブ情報を取得する
これはどのPowerShellでも利用できるコマンドレット。オプションなしで実行すると、ローカルドライブの使用済みサイズと空きサイズを取得・表示する(レジストリや環境変数などの仮想的なドライブも表示される)。

 このコマンドレットは、どのPowerShell(Window OS)でも利用できるが、物理ドライブ以外の余計な情報が表示されるのが少々煩わしいかもしれない(「Get-PSDrive C,E」のように引数を付ければドライブを限定できる)。ただし、使用済みサイズと空きサイズは表示されるが、ボリュームの総サイズは表示されない(必要ならこれらを加算するPowerShellスクリプトを作ればよい)。

Get-PSDriveでリモートのPCを調査するには?

 Get-PSDriveでリモートのPCにあるディスクの状態を調査するには、リモートでPowerShellのコマンドレットを実行する「Invoke-Command」を使ってGet-PSDriveを実行すればよい。

リモートから本TIPSで述べているコマンドなどを動作させる場合、認証方法や権限、(WinRMやファイアウォールの)リモートから実行する許可設定の状態などによって、実行できないことがある(場合によっては、さらに管理者権限のあるコマンドプロンプトやPowerShellウィンドウから実行する必要がある)。本TIPSでは、ローカルもリモートも同じActive Directoryドメインに所属するなどして、認証に関しては問題なく透過的に動作しているものとする。そうでない場合の対処方法については、今後別TIPSで紹介する。

 Invoke-Commandは次のように使用する。{ 〜 }内に、リモートで実行したいコマンドを記述する(2つ以上のコマンドを実行したい場合は、スクリプトファイルに記述する必要がある)。

  • Invoke-Command -ComputerName <リモートPC> { Get-PSDrive }

 実際に実行すると次のようになる。

Invoke-CommandとGet-PSDriveでリモートPCのドライブ情報を取得する Invoke-CommandとGet-PSDriveでリモートPCのドライブ情報を取得する
Invoke-Commandを使うと、リモートPC上で実行される。これにより、リモートPCのドライブ情報を取得できる。

Get-Volumeコマンドレットでボリュームの状態を調査する

 Get-VolumeはWindows 8/Windows Server 2012以降で利用できる新しいコマンドレットである(これらのOSで導入された、新しい「記憶域プール」などに対応している)。Get-PSDriveと違って、実際のディスクボリュームしか扱えないが、より詳しい情報を取得できる。Get-PSDriveと同様に、ドライブ名を列挙すると、そのドライブの情報のみを取得する。

Get-Volumeでボリューム情報を取得する Get-Volumeでボリューム情報を取得する
これはWindows 8以降とPowerShell(PowerShell 4.0以降)の組み合わせで利用できるコマンドレット。ボリューム情報を取得する。

 ドライブ名やサイズ以外に幾つか余計な情報が表示されているが、それらが不要なら、SelectやFormat-Tableなどで適宜整形すること(この辺りはPowerShellの基本的な使い方の話なので、ここでは触れない)。

Get-VolumeでリモートのPCを調査するには?

 リモートのPCに対してGet-Volumeを実行するには、「-CimSession」オプションでサーバ名を追加して実行する(複数列挙可能)。なおローカルもリモートも、共にWindows 8/Windows Server 2012以降が必要になる。

Get-VolumeでリモートPCのボリューム情報を取得する Get-VolumeでリモートPCのボリューム情報を取得する
-CimSessionオプションを付けて、リモートPCとのCIMセッションを指定すると、リモートPCのボリューム情報を取得できる。

結果をクリップボードにコピーする

 以上の例では、実行結果は画面に表示されているだけだが、例えばクリップボードにコピーしたければ、コマンド列の最後に「| clip」を付ければよい。結果をタブ区切りテキストにして表計算ソフトなどに貼り付けたければ、「| Out-GridView」で(GUIの)グリッド選択ツールへ送るという方法もある。

PowerShellをコマンドプロンプトから実行する

 いちいちPowerShellのウィンドウなどを開いて実行するのが面倒だったり、いつも使っているバッチファイルなどからちょっと呼び出したりしたいだけなら、PowerShellのスクリプトの前に「powershell 〜」と付けると、コマンドプロンプトからでもPowerShellのコマンドレットを直接呼び出せる。

コマンドプロンプトからPowerShellを呼び出す コマンドプロンプトからPowerShellを呼び出す
先頭にPowerShellと付ければ、コマンドプロンプトからでも直接PowerShellのコマンド列を呼び出せる。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。