Share via


Measure-Command

Misst die Ausführungszeit von Skriptblöcken und Cmdlets.

Syntax

Measure-Command
       [-InputObject <PSObject>]
       [-Expression] <ScriptBlock>
       [<CommonParameters>]

Beschreibung

Das Measure-Command Cmdlet führt intern einen Skriptblock oder ein Cmdlet aus, malt die Ausführung des Vorgangs und gibt die Ausführungszeit zurück.

Hinweis

Skriptblöcke, die im aktuellen Bereich ausgeführt werden Measure-Command , nicht im untergeordneten Bereich.

Beispiele

Beispiel 1: Messen eines Befehls

Dieses Beispiel misst die Zeit, die zum Ausführen eines Get-EventLog Befehls benötigt wird, der die Ereignisse im Windows PowerShell Ereignisprotokoll abruft.

Measure-Command { Get-EventLog "windows powershell" }

Beispiel 2: Vergleichen von zwei Ausgaben aus Measure-Command

Der erste Befehl misst die Zeit, die zum Verarbeiten eines rekursiven Get-ChildItem Befehls benötigt wird, der den Path-Parameter verwendet, um nur .txt Dateien im Verzeichnis und seinen C:\Windows Unterverzeichnissen abzurufen.

Der zweite Befehl misst die Zeit, die zum Verarbeiten eines rekursiven Get-ChildItem Befehls benötigt wird, der den anbieterspezifischen Parameter " verwendet.

Diese Befehle zeigen den Wert der Verwendung eines anbieterspezifischen Filters in PowerShell-Befehlen an.

Measure-Command { Get-ChildItem -Path C:\Windows\*.txt -Recurse }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 8
Milliseconds      : 618
Ticks             : 86182763
TotalDays         : 9.9748568287037E-05
TotalHours        : 0.00239396563888889
TotalMinutes      : 0.143637938333333
TotalSeconds      : 8.6182763
TotalMilliseconds : 8618.2763

Measure-Command {Get-ChildItem C:\Windows -Filter "*.txt" -Recurse}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 1
Milliseconds      : 140
Ticks             : 11409189
TotalDays         : 1.32050798611111E-05
TotalHours        : 0.000316921916666667
TotalMinutes      : 0.019015315
TotalSeconds      : 1.1409189
TotalMilliseconds : 1140.9189

Beispiel 3: Weiterleiten von Eingaben an Measure-Command

Objekte, die an Measure-Command übergeben werden, sind für den Skriptblock verfügbar, der an den Expression-Parameter übergeben wird. Der Skriptblock wird für jedes Objekt in der Pipeline einmal ausgeführt.

# Perform a simple operation to demonstrate the InputObject parameter
# Note that no output is displayed.
10, 20, 50 | Measure-Command -Expression { for ($i=0; $i -lt $_; $i++) {$i} }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 12
Ticks             : 122672
TotalDays         : 1.41981481481481E-07
TotalHours        : 3.40755555555556E-06
TotalMinutes      : 0.000204453333333333
TotalSeconds      : 0.0122672
TotalMilliseconds : 12.2672

Beispiel 4: Anzeigen der Ausgabe des gemessenen Befehls

Um die Ausgabe des Ausdrucks in Measure-Command anzuzeigen, können Sie eine Pipe an Out-Defaultverwenden.

# Perform the same operation as above adding Out-Default to every execution.
# This will show that the ScriptBlock is in fact executing for every item.
10, 20, 50 | Measure-Command -Expression {for ($i=0; $i -lt $_; $i++) {$i}; "$($_)" | Out-Default }

10
20
50


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 11
Ticks             : 113745
TotalDays         : 1.31649305555556E-07
TotalHours        : 3.15958333333333E-06
TotalMinutes      : 0.000189575
TotalSeconds      : 0.0113745
TotalMilliseconds : 11.3745

Beispiel 5: Messen der Ausführung in einem untergeordneten Bereich

Measure-Command führt den Skriptblock im aktuellen Bereich aus, damit der Skriptblock Werte im aktuellen Bereich ändern kann. Um Änderungen am aktuellen Bereich zu vermeiden, müssen Sie den Skriptblock in geschweifte Klammern ({}) umschließen und den Aufrufoperator (&) verwenden, um den Block in einem untergeordneten Bereich auszuführen.

$foo = 'Value 1'
$null = Measure-Command { $foo = 'Value 2' }
$foo
$null = Measure-Command { & { $foo = 'Value 3' } }
$foo

Value 2
Value 2

Weitere Informationen zum Aufrufoperator finden Sie unter about_Operators.

Parameter

-Expression

Gibt den Ausdruck an, dessen Ausführungsdauer gemessen wird. Schließen Sie den Ausdruck in geschweifte Klammern ({}) ein.

Type:ScriptBlock
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Objekte, die an den InputObject-Parameter gebunden sind, sind optionale Eingaben für den Skriptblock, der an den Expression-Parameter übergeben wird. Innerhalb des Skriptblocks kann verwendet werden, $_ um auf das aktuelle Objekt in der Pipeline zu verweisen.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

Eingaben

PSObject

Sie können ein Objekt an übergeben Measure-Command.

Ausgaben

TimeSpan

Measure-Command gibt ein Time Span-Objekt zurück, das das Ergebnis darstellt.