Measure Command - PowerShell
Overview
Measure-Command is a PowerShell command that measures the time it takes for a specified command or script block to complete. It provides performance data, including elapsed time, CPU usage, and memory consumption, helping optimize and troubleshoot scripts.
Syntax
Measure-Command [-ScriptBlock] <script block> [-Expression] <expression> [-AsJob] [-Container <container>] [-Credential <credential>] [-EventSubscriber <event subscriber>] [-Force] [-JobState <job state>] [-MaximumErrorCount <int>] [-MinimumSeconds <int>] [-Name <string>] [-ScriptArgument <object>] [-ScriptArgs <string[]>] [-ScriptFilePath <string>] [-ScriptIsHidden] [-ScriptLine <int>] [-ScriptParameter <script parameter>] [-ScriptUsesCurrentUserCredentials] [-StopwatchEnabled] [-Verbose] [-WhatIf] [-Confirm] [-ThrottleLimit <int>]
Options/Flags
- -Expression: Specify a PowerShell expression to measure the time taken to evaluate.
- -ScriptBlock: Script block to measure the time taken to execute.
- -Container: Name of the container in which to run the command or script block.
- -Credential: Credential to use for running the command or script block.
- -EventSubscriber: Subscriber to receive events from the command or script block.
- -Force: Suppress error messages and continue running the command or script block.
- -JobState: State of the job to be measured.
- -MaximumErrorCount: Maximum number of errors to allow before stopping the measurement.
- -MinimumSeconds: Minimum number of seconds to measure before completing.
- -Name: Name of the measurement session.
- -ScriptArgument: Argument to pass to the script block.
- -ScriptArgs: Array of arguments to pass to the script block.
- -ScriptFilePath: Path to the script file to execute.
- -ScriptIsHidden: Hide the script block or script file from the console.
- -ScriptLine: Line number where the measurement should begin.
- -ScriptParameter: Parameter to pass to the script block.
- -ScriptUsesCurrentUserCredentials: Run the script block using the current user’s credentials.
- -StopwatchEnabled: Enable or disable the stopwatch functionality.
- -Verbose: Output detailed information about the measurement session.
- -WhatIf: Simulate the measurement without actually executing it.
- -Confirm: Prompt for confirmation before running the measurement.
- -ThrottleLimit: Limit the number of simultaneous measurement sessions.
Examples
Example 1: Measuring execution time of a script block
Measure-Command { Get-Process }
Example 2: Evaluating an expression and measuring the time taken
Measure-Command -Expression { 1 + 2 }
Example 3: Measuring the performance of a complex script
$script = Get-Content "script.ps1"
Measure-Command { Invoke-Expression $script }
Common Issues
- High CPU usage: Ensure that the script block or command being measured does not perform excessive or inefficient operations.
- Inaccurate results: Verify that the -MinimumSeconds parameter is set to a reasonable value to ensure sufficient time for measurement.
- Measurement failing: Check for errors in the script block or command being measured, and ensure that the necessary permissions are granted for execution.
Integration
Measure-Command can be used with other PowerShell commands to create automated performance monitoring and troubleshooting scripts. For example:
$results = Measure-Command { Get-Process }
Export-Csv -Path "results.csv" -InputObject $results