2019年2月17日日曜日

PowerShellで仮想メモリの状況の表示と設定を行いたい

愛用のASUS E203MAですが、ストレージの容量に余裕がありません。

全体で64GB、空き容量は常に20GBを切るギリギリの攻防戦が宿命づけられています。

こんな状況ですから、ストレージを少しでも節約するため、仮想メモリの容量チェックとリセットは欠かせません。

大きな作業を終えた後は必ず行っています。

ただ、この仮想メモリは、そもそも隠しファイルになっているくらいで、頻繁に容量を確認したり、あまつさえ頻繁に設定を変更してリセットするユーザーなどは想定外のようです。

つまり、設定へのアクセスや変更は面倒です。

というわけで、PowerShellで容量の確認と、設定の変更をする必要に迫られてしまいました。

いつものように関数にして、プロファイルに組み込みました。


■仮想メモリの状況を確認する「VMEM」コマンド(関数)


#仮想メモリを表示
function global:VMEM() {
    WRITE-HOST "---仮想メモリ状況---"
    WRITE-HOST "〇ストレージ使用容量"
    $VMEM_STORAGE = GET-CHILDITEM "C:\" -FORCE | ?{$_.Name -match "pagefile.sys|hiberfil.sys|swapfile.sys"} 
    $VMEM_STORAGE | %{$_.Name + "(MB) " + ($_.Length/[Math]::Pow(1024,2)).ToString(".000")}
    
    WRITE-HOST "〇設定情報"
    $VMEM_INFO=Get-WmiObject -Class Win32_PageFileSetting | ?{$_.Name -eq 'C:\pagefile.sys'}
    $VMEM_INFO | %{"初期(MB)="+($_.InitialSize).ToString() + " 最大(MB)="+($_.MaximumSize).ToString()}
}

↑仮想メモリファイルは、隠しファイルであるため、素直にGET-CHILDITEMをしても無効ですので、-FORCEオプションを付けます。

仮想メモリファイルは、pagefile.sysなのですが、モダンアプリ用のものも表示してみます。


ちょっと勉強の都合上、このコードはASUS E203MAではなく、マザーシップPCの「Aspire 5750G」で作成し、実行してみました。



WINDOWS>VMEM
---仮想メモリ状況---
〇ストレージ使用容量
hiberfil.sys(MB) 6494.340
pagefile.sys(MB) 16.000
swapfile.sys(MB) 16.000
〇設定情報
初期(MB)=16 最大(MB)=16

↑実行すると、ストレージを圧迫する容量と、仮想メモリの設定がどうなっているのか、両方を表示するようになっています。

単位ですが、悩んだのですが、設定時にはメガバイトで指定するようになっているため、メガバイト(MB)単位にしました。


■仮想メモリの設定をする

見るのは良いとして、では設定を変更するためのコマンドです。

初期値と最大値を前の値から変更します。

コマンドはVMEM_RESET 初期値 最大値とパラメータ付きで実行するように作りました。

環境によって必要な値は違うし、そもそも、ストレージに余裕があればこの設定はしない方が良いです。

私には必要でも、設定変更系はリスキーなのでおすすめするものではないです。




function global:VMEM_RESET($INIT, $MAX) {
    $VMEM_INFO=Get-WmiObject -Class Win32_PageFileSetting | ?{$_.Name -eq 'C:\pagefile.sys'}
    $VMEM_INFO.InitialSize =$INIT
    $VMEM_INFO.MaximumSize =$MAX
    $VMEM_INFO.put()

    #仮想メモリ内容
    VMEM
    WRITE-HOST "---【注意】再起動が必要です!!---"
}



WINDOWS>VMEM_RESET 16 1024


Path          : ¥¥localhost¥root¥cimv2:Win32_PageFileSetting.Name="c:¥¥pagefile.sys"
RelativePath  : Win32_PageFileSetting.Name="c:¥¥pagefile.sys"
Server        : localhost
NamespacePath : root¥cimv2
ClassName     : Win32_PageFileSetting
IsClass       : False
IsInstance    : True
IsSingleton   : False

---仮想メモリ状況---
〇ストレージ使用容量
hiberfil.sys(MB) 6494.340
pagefile.sys(MB) 16.000
swapfile.sys(MB) 16.000
〇設定情報
初期(MB)=16 最大(MB)=1024
---【注意】再起動が必要です!!---


↑仮想メモリの設定を変更した後は、再起動しないと反映されません。

コマンドで勝手に再起動というのはマキシマム・リスクなので、勝手に再起動はしません。

一応の警告メッセージのみ表示にとどめております。

ちなみにあくまでも参考までにですが、RESTART-COMPUTERで再起動します・・・がホントに一気にいきなり再起動に行くので実行には最大限の注意が必要です。