Секундомір для PowerShell скрипта.
Іноді потрібно визначити час, витрачений на виконання команди або скрипта. У PowerShell є кілька способів вирішення цього завдання. Наприклад в .NET є спеціальний клас StopWatch, який можна використовувати як секундомір для виміру часу, витраченого на виконання завдання.
Клас StopWatch входить в простір імен System.Diagnostics і у нього є статичний метод StartNew. За допомогою цього методу створимо новий екземпляр класу StopWatch, збережемо його в змінну і виведемо властивості і методи нашого "таймера":
$ watch = [System.Diagnostics.Stopwatch] :: StartNew ()
$ watch | Get-Member
Тут нас цікавлять методи Start і Stop, що відповідають за запуск і зупинку таймера і властивість Elapsed, що показує час, що минув.
Тепер створимо ось такий скрипт, який шукає в папці Windows всі файли з розширенням txt і записує отриманий результат в файл:
$ watch = [System.Diagnostics.Stopwatch] :: StartNew ()
$ watch.Start () # Запуск таймера
Get-Childitem -Path C : \ Windows -Filter "* .txt" -Recurse | Out-File C: \ Files \ files.txt
$ watch.Stop () # Зупинка таймера
Write-Host $ watch.Elapsed # Час виконання
Запустимо його і подивимося, що видасть секундомір. Як бачите, виконання завдання зайняло трохи більше 3 секунд (3,2).
Ще для вимірювання часу виконання завдання в PowerShell є командлет Measure-Command. Цей командлет бере команду \ блок команд, зазначену в фігурних дужках, виконує її всередині себе і в якості результату видає час, витрачений на виконання.Ось так буде виглядати наш скрипт з використанням Measure-Command:
Measure-Command -Expression {Get-Childitem -Path C: \ Windows -Filter "* .txt" -Recurse | Out-File C: \ Files \ files.txt}
Результат такий самий, як і в попередньому прикладі - 3,2 секунди.
Measure-Command видає результат в не дуже зручному вигляді. Для того, щоб отримати більш наочне уявлення, можна скористатися методом ToString:
$ time = Measure-Command -Expression {Get-Childitem -Path C: \ Windows`
-Filter "*.txt "-Recurse | Out-File C: \ Files \ files.txt}
$ time.ToString ()
В цьому випадку результат виводиться в один рядок, в такому ж вигляді, як і при використанні StopWatch.
на закінчення нагадаю, що на швидкість виконання скрипта може впливати завантаженість системи, швидкість мережею та інші зовнішні чинники.Для однієї і тієї ж команди, запущеної в різний час результат може помітно відрізнятися. Тому для отримання більш-менш точного результату вимірювання варто повторити 2-3 рази.
.