2019年2月17日日曜日

PowerShellでストレージの容量を表示しつつ、色々考えてみる

PowerShellでストレージの容量を表示してみたい!

という時は、ぶっちゃけ「GET-DRIVE」だけなのですが、それをベースに色々なPowerShellの書き方を盛り込んでみたいと思います。

  • 処理は関数化
  • バイト数をGBに変換する関数を作成
  • 残量18GB切ったら警告表示
というわけで、以下の関数を作って、プロファイルに組み込んでみました。

プロファイルがあれば「II (SPLIT-PATH $PROFILE)」コマンドで場所が開きます。



#Byte=>GB変換(小数点以下3桁まで)
function global:ConvertGB([double]$value) {
    $compute = [Math]::Round($value/[Math]::Pow(1024,3),3);
    
    return $compute;
}
#ストレージ状況
function global:STORAGE() {
    $LINE="-" * 80;
    $STORAGE_SOURCES = GET-PSDRIVE | ?{$_.Provider -match "FileSystem"}
    WRITE-HOST "---ストレージ使用状況---"
    WRITE-HOST $LINE;
    foreach($STORAGE_SOURCE in $STORAGE_SOURCES) {
        $MES = (
            $STORAGE_SOURCE.Name + "ドライブ"+
            " ☆空き(GB)=" +(ConvertGB ($STORAGE_SOURCE.Free)).ToString(".000")+
            " 使用中(GB)=" +(ConvertGB ($STORAGE_SOURCE.Used)).ToString(".000")+
            " 全容量(GB)=" +(ConvertGB ($STORAGE_SOURCE.Used + $STORAGE_SOURCE.Free)).ToString(".000")
        );
        WRITE-HOST $MES;
        if((ConvertGB $STORAGE_SOURCE.Free) -lt 18.0) {
            WRITE-HOST ((" "*10)+"【容量注意】"); 
        }
        WRITE-HOST $LINE;
    }
}


↑GET-PSDRIVEで情報を取得し、ファイルシステム分だけの情報に絞り込み、空き、使用中、全容量をドライブ毎に一行にして表示。

最初はオブジェクトを繰り返し処理する%{}で書いてみましたが、かなり横長なので、foreach()によるコード記述にしました。

18.0GBを切ると警告メッセージ。

愛用のASUS E203MAは、eMMC-64GBなので残量にはナーバスです。

大型のWindows Updateさえ来なければなぁと思うのですが、しゃあない。

画面にテキストを表示する時には、WRITE-HOST使っていますが、PowerShellで文字列を連続で表示したい時は"文字列"*回数と書くだけで手軽にできるので凄い。



C:\>STORAGE
---ストレージ使用状況---
--------------------------------------------------------------------------------
Cドライブ ☆空き(GB)=17.499 使用中(GB)=39.691 全容量(GB)=57.189
          【容量注意】
--------------------------------------------------------------------------------
Dドライブ ☆空き(GB)=30.517 使用中(GB)=28.497 全容量(GB)=59.015
--------------------------------------------------------------------------------

↑実行するとこのような感じです。

あらららいきなり容量注意だーー。


↑というわけで、仮想メモリ見たら3GBほど膨らんでいたため、クリーンアップして再起動。

ギリギリでストレージの空きが20GB台を回復しました。

ASUS E203MAを本気でガンガン使うと、どうしてもExcel 2019、VS Code、SQL-Server、OneNote、ブラウザあたりは同時に起動しておくため、メインRAM 4GBだと仮想メモリが膨張してしまいますね。

eMMC-64GBだと、本当に1GBの価値が高いというか重たいので、将来的にSSD-256GBなどという驚異の超贅沢はぶっこかないので、eMMC-128GBのASUS E203シリーズ出て欲しい!!