PCを管理するために、ディスクのサイズや空きサイズなどを調べたいことがあるだろう。多くのリモートPCを調査するなら、PowerShellやコマンドプロンプト上で動作するCUIのツールを使うと便利だ。その方法をまとめておく。
対象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でディスク(ボリューム)の総サイズや空き領域を調べるコマンドレットとしては、「Get-PSDrive」と「Get-Volume」の2つがある。
Get-PSDriveコマンドレットは、ローカルに接続されている「ドライブ」の概要情報を表示するためのコマンドである。C:やD:といった物理的なドライブだけでなく、リモートのサーバ(のファイル共有)をマウントしているネットワークドライブや、レジストリや環境変数のような擬似的な(PowerShellの)ドライブも表示する。
このコマンドレットは、どのPowerShell(Window OS)でも利用できるが、物理ドライブ以外の余計な情報が表示されるのが少々煩わしいかもしれない(「Get-PSDrive C,E」のように引数を付ければドライブを限定できる)。ただし、使用済みサイズと空きサイズは表示されるが、ボリュームの総サイズは表示されない(必要ならこれらを加算するPowerShellスクリプトを作ればよい)。
Get-PSDriveでリモートのPCにあるディスクの状態を調査するには、リモートでPowerShellのコマンドレットを実行する「Invoke-Command」を使ってGet-PSDriveを実行すればよい。
※リモートから本TIPSで述べているコマンドなどを動作させる場合、認証方法や権限、(WinRMやファイアウォールの)リモートから実行する許可設定の状態などによって、実行できないことがある(場合によっては、さらに管理者権限のあるコマンドプロンプトやPowerShellウィンドウから実行する必要がある)。本TIPSでは、ローカルもリモートも同じActive Directoryドメインに所属するなどして、認証に関しては問題なく透過的に動作しているものとする。そうでない場合の対処方法については、今後別TIPSで紹介する。
Invoke-Commandは次のように使用する。{ 〜 }内に、リモートで実行したいコマンドを記述する(2つ以上のコマンドを実行したい場合は、スクリプトファイルに記述する必要がある)。
実際に実行すると次のようになる。
Get-VolumeはWindows 8/Windows Server 2012以降で利用できる新しいコマンドレットである(これらのOSで導入された、新しい「記憶域プール」などに対応している)。Get-PSDriveと違って、実際のディスクボリュームしか扱えないが、より詳しい情報を取得できる。Get-PSDriveと同様に、ドライブ名を列挙すると、そのドライブの情報のみを取得する。
ドライブ名やサイズ以外に幾つか余計な情報が表示されているが、それらが不要なら、SelectやFormat-Tableなどで適宜整形すること(この辺りはPowerShellの基本的な使い方の話なので、ここでは触れない)。
リモートのPCに対してGet-Volumeを実行するには、「-CimSession」オプションでサーバ名を追加して実行する(複数列挙可能)。なおローカルもリモートも、共にWindows 8/Windows Server 2012以降が必要になる。
以上の例では、実行結果は画面に表示されているだけだが、例えばクリップボードにコピーしたければ、コマンド列の最後に「| clip」を付ければよい。結果をタブ区切りテキストにして表計算ソフトなどに貼り付けたければ、「| Out-GridView」で(GUIの)グリッド選択ツールへ送るという方法もある。
いちいちPowerShellのウィンドウなどを開いて実行するのが面倒だったり、いつも使っているバッチファイルなどからちょっと呼び出したりしたいだけなら、PowerShellのスクリプトの前に「powershell 〜」と付けると、コマンドプロンプトからでもPowerShellのコマンドレットを直接呼び出せる。
Copyright© Digital Advantage Corp. All Rights Reserved.