Freigeben über


Trace-Command

Konfiguriert und startet eine Ablaufverfolgung des angegebenen Ausdrucks oder Befehls.

Syntax

Trace-Command
     [-InputObject <PSObject>]
     [-Name] <String[]>
     [[-Option] <PSTraceSourceOptions>]
     [-Expression] <ScriptBlock>
     [-ListenerOption <TraceOptions>]
     [-FilePath <String>]
     [-Force]
     [-Debugger]
     [-PSHost]
     [<CommonParameters>]
Trace-Command
     [-InputObject <PSObject>]
     [-Name] <String[]>
     [[-Option] <PSTraceSourceOptions>]
     [-Command] <String>
     [-ArgumentList <Object[]>]
     [-ListenerOption <TraceOptions>]
     [-FilePath <String>]
     [-Force]
     [-Debugger]
     [-PSHost]
     [<CommonParameters>]

Beschreibung

Das Trace-Command Cmdlet konfiguriert und startet eine Ablaufverfolgung des angegebenen Ausdrucks oder Befehls. Es funktioniert wie Set-TraceSource, mit dem Unterschied, dass es nur für den angegebenen Befehl gilt.

Beispiele

Beispiel 1: Ablaufverfolgungsmetadatenverarbeitung, Parameterbindung und ein Ausdruck

In diesem Beispiel wird eine Ablaufverfolgung der Metadatenverarbeitung, der Parameterbindung sowie der Cmdleterstellung und -zerstörung des Get-Process Notepad Ausdrucks gestartet.

Trace-Command -Name metadata,parameterbinding,cmdlet -Expression {Get-Process Notepad} -PSHost

Er verwendet den Parameter Name , um die Ablaufverfolgungsquellen, den Expression-Parameter zum Angeben des Befehls und den PSHost-Parameter anzugeben, um die Ausgabe an die Konsole zu senden. Da keine Ablaufverfolgungsoptionen oder Listeneroptionen angegeben werden, verwendet der Befehl die Standardwerte:

  • Alle für die Ablaufverfolgungsoptionen
  • Keine für die Listeneroptionen

Beispiel 2: Nachverfolgen der Aktionen von ParameterBinding-Vorgängen

In diesem Beispiel werden die Aktionen der ParameterBinding-Vorgänge von PowerShell verfolgt, während ein Get-Alias Ausdruck verarbeitet wird, der Eingaben aus der Pipeline annimmt.

$A = "i*"
Trace-Command ParameterBinding {Get-Alias $Input} -PSHost -InputObject $A

In Trace-Commandübergibt der InputObject-Parameter ein Objekt an den Ausdruck, der während der Ablaufverfolgung verarbeitet wird.

Der erste Befehl speichert die Zeichenfolge i* in der $A Variablen. Der zweite Befehl verwendet das Trace-Command Cmdlet mit der Ablaufverfolgungsquelle ParameterBinding. Der PSHost-Parameter sendet die Ausgabe an die Konsole.

Der verarbeitete Ausdruck ist Get-Alias $Input, wobei die $Input Variable dem InputObject-Parameter zugeordnet ist. Der InputObject-Parameter übergibt die Variable $A an den Ausdruck. Tatsächlich ist der Befehl, der während der Ablaufverfolgung verarbeitet wird Get-Alias -InputObject $A" or "$A | Get-Alias, .

Beispiel 3: Trace ParameterBinding-Vorgänge für native Befehle

PowerShell 7.3 hat die Möglichkeit hinzugefügt, die Parameterbindung für native Befehle nachzuverfolgen. Das folgende Beispiel zeigt, wie PowerShell die Befehlszeilenargumente für den nativen Befehl TestExeanalysiert.

$a = 'a" "b'
Trace-Command -PSHOST -Name ParameterBinding { TestExe -echoargs $a 'c" "d' e" "f }

DEBUG: 2023-02-27 14:20:45.3975 ParameterBinding Information: 0 : BIND NAMED native application line args [C:\Public\Toolbox\TestExe\testexe.exe]
DEBUG: 2023-02-27 14:20:45.3978 ParameterBinding Information: 0 :     BIND cmd line arg [-echoargs] to position [0]
DEBUG: 2023-02-27 14:20:45.3979 ParameterBinding Information: 0 :     BIND cmd line arg [a" "b] to position [1]
DEBUG: 2023-02-27 14:20:45.3980 ParameterBinding Information: 0 :     BIND cmd line arg [c" "d] to position [2]
DEBUG: 2023-02-27 14:20:45.3982 ParameterBinding Information: 0 :     BIND cmd line arg [e f] to position [3]
DEBUG: 2023-02-27 14:20:47.6092 ParameterBinding Information: 0 : CALLING BeginProcessing

Parameter

-ArgumentList

Gibt die Parameter und Parameterwerte für den verfolgten Befehl an. Der Alias für ArgumentList ist Args. Dieses Feature ist nützlich für das Debuggen dynamischer Parameter.

Weitere Informationen zum Verhalten von ArgumentList finden Sie unter about_Splatting.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Command

Gibt einen Befehl an, der während der Ablaufverfolgung verarbeitet wird.

Wenn Sie diesen Parameter verwenden, verarbeitet PowerShell den Befehl genauso, wie er in einer Pipeline verarbeitet wird. Beispielsweise wird die Befehlsermittlung nicht für jedes eingehende Objekt wiederholt.

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Debugger

Gibt an, dass das Cmdlet die Ablaufverfolgungsausgabe an den Debugger sendet. Sie können die Ausgabe in jeden Benutzermodus- oder Kernelmodus-Debugger oder in Visual Studio anzeigen. Dieser Parameter wählt auch den Standard-Ablaufverfolgungslistener aus.

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

-Expression

Gibt den Ausdruck an, der während der Ablaufverfolgung verarbeitet wird. Schließen Sie den Ausdruck in Klammern ({}) ein.

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

-FilePath

Gibt eine Datei an, an die das Cmdlet die Ablaufverfolgungsausgabe sendet. Dieser Parameter wählt auch den Ablaufverfolgungslistener der Datei aus.

Type:String
Aliases:PSPath, Path
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

Erzwingt die Ausführung des Befehls ohne Aufforderung zur Bestätigung durch den Benutzer. Wird mit dem FilePath-Parameter verwendet. Selbst mit dem Force-Parameter kann das Cmdlet keine Sicherheitseinschränkungen außer Kraft setzen.

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

-InputObject

Gibt die Eingabe für den Ausdruck an, der während der Ablaufverfolgung verarbeitet wird. Sie können eine Variable eingeben, die die Eingabe darstellt und die vom Ausdruck akzeptiert wird, oder Sie können ein Objekt über die Pipeline übergeben.

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

-ListenerOption

Gibt optionale Daten für das Präfix jeder Ablaufverfolgungsnachricht in der Ausgabe an. Zulässige Werte für diesen Parameter:

  • None
  • LogicalOperationStack
  • DateTime
  • Timestamp
  • ProcessId
  • ThreadId
  • Callstack

None ist die Standardoption.

Diese Werte werden als flagbasierte Enumeration definiert. Sie können mehrere Werte miteinander kombinieren, um mehrere Flags mit diesem Parameter festzulegen. Die Werte können als Array von Werten oder als durch Trennzeichen getrennte Zeichenfolge dieser Werte an den ListenerOption-Parameter übergeben werden. Das Cmdlet kombiniert die Werte mithilfe eines binär-OR-Vorgangs. Das Übergeben von Werten als Array ist die einfachste Option und ermöglicht es Ihnen auch, die Tabulatorvervollständigung für die Werte zu verwenden.

Type:TraceOptions
Accepted values:None, LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

Gibt ein Array von PowerShell-Komponenten an, die nachverfolgt werden. Geben Sie den Namen der Ablaufverfolgungsquelle jeder Komponente ein. Platzhalter sind zulässig. Geben Sie ein, Get-TraceSourceum die Ablaufverfolgungsquellen auf Ihrem Computer zu finden.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Option

Bestimmt den Typ der Ereignisse, die verfolgt werden. Zulässige Werte für diesen Parameter:

  • None
  • Constructor
  • Dispose
  • Finalizer
  • Method
  • Property
  • Delegates
  • Events
  • Exception
  • Lock
  • Error
  • Errors
  • Warning
  • Verbose
  • WriteLine
  • Data
  • Scope
  • ExecutionFlow
  • Assert
  • All

All ist die Standardoption.

Die folgenden Werte sind Kombinationen von anderen Werten:

  • ExecutionFlow: Constructor, Dispose, Finalizer, Method, Delegates, Events, Scope
  • Data: Constructor, Dispose, Finalizer, Property, Verbose, WriteLine
  • Errors: Error, Exception

Diese Werte werden als flagbasierte Enumeration definiert. Sie können mehrere Werte miteinander kombinieren, um mehrere Flags mit diesem Parameter festzulegen. Die Werte können als Array von Werten oder als durch Trennzeichen getrennte Zeichenfolge dieser Werte an den Parameter Option übergeben werden. Das Cmdlet kombiniert die Werte mithilfe eines binär-OR-Vorgangs. Das Übergeben von Werten als Array ist die einfachste Option und ermöglicht es Ihnen auch, die Tabulatorvervollständigung für die Werte zu verwenden.

Type:PSTraceSourceOptions
Accepted values:None, Constructor, Dispose, Finalizer, Method, Property, Delegates, Events, Exception, Lock, Error, Errors, Warning, Verbose, WriteLine, Data, Scope, ExecutionFlow, Assert, All
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PSHost

Gibt an, dass das Cmdlet die Ablaufverfolgungsausgabe an den PowerShell-Host sendet. Dieser Parameter wählt auch den PSHost-Ablaufverfolgungslistener aus.

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

Eingaben

PSObject

Sie können Objekte, die Eingaben an den Ausdruck darstellen, an dieses Cmdlet übergeben.

Ausgaben

PSObject

Dieses Cmdlet gibt keine eigene Ausgabe zurück. Der Ablaufverfolgungsbefehl gibt möglicherweise eine Ausgabe zurück. Dieses Cmdlet schreibt die Befehlsablaufverfolgung in den Debugstream.

Hinweise

Die Ablaufverfolgung ist eine Methode, die Entwickler zum Debuggen und Optimieren von Programmen verwenden. Bei der Ablaufverfolgung erzeugt das Programm ausführliche Meldungen zu den einzelnen Schritten in der internen Verarbeitung. Die PowerShell-Ablaufverfolgungs-Cmdlets sind so konzipiert, dass sie PowerShell-Entwicklern helfen, aber sie sind für alle Benutzer verfügbar. Damit können Sie fast jeden Aspekt der Shell-Funktionalität überwachen.

Eine Ablaufverfolgungsquelle ist der Teil jeder PowerShell-Komponente, die die Ablaufverfolgung verwaltet und Ablaufverfolgungsmeldungen für die Komponente generiert. Um eine Komponente zu verfolgen, identifizieren Sie die Ablaufverfolgungsquelle.

Verwenden Sie Get-TraceSource , um eine Liste der PowerShell-Komponenten anzuzeigen, die für die Ablaufverfolgung aktiviert sind.

Ein Ablaufverfolgungslistener empfängt die Ausgabe der Ablaufverfolgung und zeigt sie dem Benutzer an. Sie können die Ablaufverfolgungsdaten an einen Debugger im Benutzer- oder Kernelmodus, an den Host oder die Konsole, an eine Datei oder an einen benutzerdefinierten Listener senden, der von der System.Diagnostics.TraceListener-Klasse abgeleitet ist.