PowerShell Gallery - PSProfiler
PowerShellでは開始時に読み込むProfileに設定を記述することで、環境をカスタマイズすることができます。
ただしProfileに色々と処理を追加した結果、起動処理に時間がかかるようになることが多々あるかと思います。
そのような場合、Profileのどの部分で時間がかかっているか調べることになりますが。
PowerShell Galleryで公開されているPSProfilerモジュールを利用すれば、どの部分で時間がかかっているか簡単に調べることができます。
モジュールのインストール
下記コマンドでPsProfilerモジュールをインストールできます。
インストールするスコープはお好みで。
今回は2022年6月30日時点でpreview版となっている1.0.5-preview1
をインストールしたかったため、-AllowPrerelease -Force
のオプションをつけています。
# スコープはCurrentUserでインストール
Install-Module -Name psprofiler -Scope CurrentUser -AllowPrerelease -Force
今回の環境
- PowerShell 7.3.0-preview.5
- PSProfiler 1.0.5-preview1
起動時間を計測してみる
PsProfilerではスクリプトの実行時間を計測してくれる、Measure-Script
コマンドレットが提供され、このコマンドレットを利用します。
起動時間を調査する方法としては。
PowerShellで開始時にProfileを読み込まないオプション -NoProfile で起動して、Measure-Scriptで$profileを実行して計測します。
上記の流れをコマンドで実行すると下記のようになります。
# topオプションが使えるのは、1.0.5-preview1から
pwsh.exe -NoProfile -Command {Measure-Script -path $profile -Top 5}
コマンドを実行すると下記のように、各ステートメントでの実行時間が表示されるようになります。
今回オプションで-top 5
としているため、実行時間の上位5つについては赤く表示されている事がわかります。
このようにして、処理に時間がかかっているステートメントを簡単に洗い出す事ができます。
参考サイト
総評
起動プロファイルは色々とやりたい事を盛り込み始めると、起動に時間がかかるようになってしまう事がありますが、PSProfilerを使うことで簡易に調査が行なえます。
また今回は起動プロファイルでしたが、普通にスクリプトの実行時間を調査するにも有用となります。