29歳、離婚しました。

家事は元妻にまかせっきり。そんな生活力ゼロ男の離婚後の生活を綴ったブログです。著者がその後の生活の中で見つけた生活術やお役立ち情報をお届けします。

PowerShellで処理時間や処理の区間時間(ラップタイム)を計測する方法

   

PowerShellで、処理の実行に要した時間を計測したい!

PowerShellスクリプトの処理中で、処理の実行に要した時間を計測しておきたい!
と考えることがあります。

たとえば時間がかかる処理や、処理の実行にかかる時間が実行する度に異なるような処理について、その処理時間を計測。
そしてそれをログに記録しておき、スクリプトの実行速度の改善や実行計画の検討に役立てる※、といったケースが挙げられます。

※深夜などの業務時間外に、PowerShellスクリプトの実行が終わるようにタスクの開始時間を設定するなど。

そこで今回は、PowerShellで処理にかかった時間を計測する方法をご紹介します!
また、処理の区間時間(ラップタイム)を計測する方法についてもご紹介しますので、ぜひ参考になさってください!

PowerShellで、処理にかかった時間を計測する方法

PowerShellで、処理にかかった時間を計測したい場合には、以下のような方法で対応可能です。

時間計測用の専用のコマンドレットを使用する方法

PowerShellには、処理の実行に要した時間を計測するための専用のコマンドレット、『Measure-Command』が用意されています。
そのため、このコマンドレットを使用する方法が最も簡単でおすすめできる方法です。

『Measure-Command』コマンドレットは、以下のような構文で使用します。

使い方はとっても簡単で、処理時間を計測したい部分を『Measure-Command{}』のカッコ内に記述するだけでOKです。

今回の説明では、実行に時間がかかる処理の代用として、PowerShellの処理を一定時間停止する『Start-Sleep』コマンドレットを使ってご説明しましょう。

3秒間処理を一時停止する処理である『Start-Sleep -Seconds 3』の実行時間を計測したい場合には、以下のような記述を行います。

上記PowerShellスクリプトを実行すると、以下のような結果が標準出力されます。

『Measure-Command』コマンドレットを実行した際に出力される標準出力

秒単位の処理時間は『TotalSeconds』に格納されており、上記実行例では実行に要した時間は『3.0044146』秒ということです。
またミリ秒単位の時間を取得したい場合には、『TotalMilliseconds』に格納されている情報を参照すると良いでしょう。

秒単位の時間のみを出力したい場合には、以下のような記述で対応可能です。

※『Start-Sleep -Seconds 3』の部分は計測したい処理に書き換えて使用してください。

また、出力を『処理にかかった時間:x.xxx … 秒』といった形式としたい場合には、以下のような記述を行います。

『Measure-Command』コマンドレットの結果は変数に取得可能!

『Measure-Command』コマンドレットの結果は、TimeSpan型(構造体)で取得されます。
そのため、『Measure-Command』コマンドレットの結果を変数に取得・格納することも、もちろん可能です。

参考:Microsoft Docs – TimeSpan 構造体

たとえば『Measure-Command』コマンドレットの結果を、$TimeSpan変数に取得。
そして処理の実行に要した時間(秒 = TotalSeconds)を、『処理にかかった時間:x.xxx … 秒』という形式で標準出力したい場合には、以下のような記述を行います。

TimeSpan型の変数は、書式指定文字列を使うことで、指定した形式の文字列に変換、取得することが可能です。
処理の実行に要した時間を『x日x時間x分x秒xxx』(末尾はミリ秒)の形式で取得したいときは、以下のような記述を行ってください。

書式指定文字列についての詳細は、以下Microsoftさんのドキュメントも参考になさってください。

参考:Microsoft Docs – カスタム TimeSpan 書式指定文字列

また書式指定文字列を設定・検討する際は、指定の期間情報が格納されているTimeSpan型の変数があると便利でしょう。
PowerShellでTimeSpan型の変数を用意する際は、以下のようなコマンドを実行します。

開始時間と終了時間の差を計算して処理時間を取得する方法

ある処理の実行に要した時間は、以下のような記述により処理の開始時間と終了時間の差を計算することでも取得可能です。

$StartTimeと$StopTime変数には、DateTime型のオブジェクトが取得されます。
そしてPowerShellでは、DateTimeオブジェクト同士の差を計算すると、TimeSpanオブジェクトが取得される仕様です。

したがって先ほどご紹介した書式指定文字列を指定することで、処理に要した時間を指定した形式の文字列に変換、取得できます。

PowerShellで、処理の区間時間(ラップタイム)を計測する方法

PowerShellで、処理の区間時間(ラップタイム)を計測したい場合には、開始時間と終了時間の差を計算して処理時間を計測する方法を応用することで対応可能です。

たとえば、あるPowerShellスクリプトファイル内で、処理1~3の実行にかかった区間時間と、全処理時間を計測したい場合には、以下のような記述により計測が可能です。

上記PowerShellスクリプトを実行すると、以下のような結果が標準出力されます。

以上、参考になさってくださーい!

 - Windows, デジタル・家電

ピックアップ コンテンツ&スポンサーリンク