PowerShellでメモリ監視
少し前にPowerShellで各プロセスのメモリ使用量を取得する方法をまとめました。
せっかくなのでそれを使ってメモリ監視するスクリプトを書いてみました。
起動させるとこんな感じで、メモリ使用率とメモリ使用量の多いプロセストップ5が表示されます。
定期的に情報を再取得して再描画するようになっています。
PowerShellの窓さえ立ち上げておけばよいのでそこそこ軽いかなと思います。
合間でサッと作ったので作りは荒いですw
このままだとただのスクリプトの紹介でしかないので、
このスクリプトを書く上で必要だった要素を2つまとめていきます。
メモリ使用率の取得
メモリ使用率はWMIから計算可能です。
以下のコマンドでWMIを取得します。
Get-CimInstance Win32_OperatingSystem
取得したWMIの中の TotalVisibleMemorySize
が総メモリサイズ、FreePhysicalMemory
が空きメモリサイズになります。
これらを使ってメモリ使用率は以下のように求めることができます。
Get-CimInstance Win32_OperatingSystem | %{(($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)/$_.TotalVisibleMemorySize)}
コンソールの情報取得やカーソル位置の変更
コンソールの情報は以下で取得可能です。
> $Host.UI.RawUI ForegroundColor : Gray BackgroundColor : Black CursorPosition : 0,44 WindowPosition : 0,0 CursorSize : 25 BufferSize : 160,45 WindowSize : 160,45 MaxWindowSize : 160,45 MaxPhysicalWindowSize : 1904,63 KeyAvailable : True WindowTitle : C:\ - PowerShell 7.3 (9896)
$hostは自動変数で、現在のコンソールの情報を保持しています。そこを辿って RawUI
というプロパティに諸々の情報が格納されています。
今回のスクリプトではカーソル位置の変更を使いました。
以下のような感じでカーソル位置の変更が可能です。
$cursorPos = $host.UI.RawUI.CursorPosition $cursorPos.X = 10 $cursorPos.Y = 5 $host.UI.RawUI.CursorPosition = $cursorPos
理由は不明ですが、$host.UI.RawUI.CursorPosition.X = 10
のように直接代入してもカーソル位置は変わらないです。
ReadOnlyなのかな。。
普段所謂プログラミング言語でコードを書いていると
久々にシェルスクリプトもそうですが、PowerShellに触れると構文というか考え方というか雰囲気が変わるので
一瞬、アレっ?てなりますよね。