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 cmdlet Trace-Command
konfiguriert und startet eine Ablaufverfolgung des angegebenen Ausdrucks oder Befehls.
Es funktioniert wie Set-TraceSource, mit der Ausnahme, dass sie 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 und der Erstellung und Zerstörung des Get-Process Notepad
Ausdrucks gestartet.
Trace-Command -Name metadata,parameterbinding,cmdlet -Expression {Get-Process Notepad} -PSHost
Der Parameter Name wird verwendet, um die Ablaufverfolgungsquellen anzugeben, den parameter Expression, um den Befehl anzugeben, und den PSHost Parameter, 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 während der Prozesse eines Get-Alias
Ausdrucks, der Eingaben aus der Pipeline übernimmt, verfolgt.
$A = "i*"
Trace-Command ParameterBinding {Get-Alias $Input} -PSHost -InputObject $A
In Trace-Command
übergibt der parameter InputObject ein Objekt an den Ausdruck, der während der Ablaufverfolgung verarbeitet wird.
Der erste Befehl speichert die Zeichenfolge i*
in der variablen $A
. Der zweite Befehl verwendet das Cmdlet Trace-Command
mit der ParameterBinding-Ablaufverfolgungsquelle. Der parameter PSHost sendet die Ausgabe an die Konsole.
Der verarbeitete Ausdruck wird Get-Alias $Input
, wobei die $Input
Variable dem parameter InputObject zugeordnet ist. Der parameter InputObject übergibt die Variable $A
an den Ausdruck. Tatsächlich wird 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 systemeigene Befehle
PowerShell 7.3 hat die Möglichkeit zum Nachverfolgen der Parameterbindung für systemeigene Befehle hinzugefügt. Das folgende Beispiel zeigt, wie PowerShell die Befehlszeilenargumente für den systemeigenen Befehl TestExe
analysiert.
$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 Befehl an, der nachverfolgt wird. Der Alias für ArgumentList- ist Args. Dieses Feature eignet sich zum Debuggen dynamischer Parameter.
Weitere Informationen zum Verhalten von ArgumentList-finden Sie unter about_Splatting.
Typ: | Object[] |
Aliase: | Args |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | 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 würde. Beispielsweise wird die Befehlsermittlung für jedes eingehende Objekt nicht wiederholt.
Typ: | String |
Position: | 1 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Debugger
Gibt an, dass das Cmdlet die Ablaufverfolgungsausgabe an den Debugger sendet. Sie können die Ausgabe in jedem Beliebigen Benutzermodus- oder Kernelmodusdebugger oder in Visual Studio anzeigen. Dieser Parameter wählt auch den standardmäßigen Ablaufverfolgungslistener aus.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Expression
Gibt den Ausdruck an, der während der Ablaufverfolgung verarbeitet wird. Schließen Sie den Ausdruck in geschweifte Klammern ein ({}
).
Typ: | ScriptBlock |
Position: | 1 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-FilePath
Gibt eine Datei an, an die das Cmdlet die Ablaufverfolgungsausgabe sendet. Dieser Parameter wählt auch den Listener für die Dateiablaufverfolgung aus.
Typ: | String |
Aliase: | PSPath, Path |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Force
Erzwingt die Ausführung des Befehls, ohne eine Benutzerbestätigung zu verlangen. Wird mit dem parameter FilePath verwendet. Selbst bei Verwendung des parameters Force kann das Cmdlet keine Sicherheitseinschränkungen außer Kraft setzen.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-InputObject
Gibt Eingaben für den Ausdruck an, der während der Ablaufverfolgung verarbeitet wird. Sie können eine Variable eingeben, die die Eingabe darstellt, die der Ausdruck akzeptiert, oder ein Objekt über die Pipeline übergeben.
Typ: | PSObject |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-ListenerOption
Gibt optionale Daten für das Präfix jeder Ablaufverfolgungsnachricht in der Ausgabe an. Die zulässigen Werte für diesen Parameter sind:
None
LogicalOperationStack
DateTime
Timestamp
ProcessId
ThreadId
Callstack
None
ist die Standardeinstellung.
Diese Werte werden als flagbasierte Enumeration definiert. Sie können mehrere Werte kombinieren, um mehrere Flags mithilfe dieses Parameters festzulegen. Die Werte können an den ListenerOption Parameter als Array von Werten oder als kommagetrennte Zeichenfolge dieser Werte übergeben werden. Das Cmdlet kombiniert die Werte mithilfe eines Binary-OR-Vorgangs. Das Übergeben von Werten als Array ist die einfachste Option und ermöglicht ihnen auch die Verwendung des Tabstopps für die Werte.
Typ: | TraceOptions |
Zulässige Werte: | None, LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Name
Gibt ein Array von PowerShell-Komponenten an, die nachverfolgt werden. Geben Sie den Namen der Ablaufverfolgungsquelle jeder Komponente ein. Wildcards sind zulässig. Geben Sie Get-TraceSource
ein, um die Ablaufverfolgungsquellen auf Ihrem Computer zu finden.
Typ: | String[] |
Position: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Option
Bestimmt den Typ der Ereignisse, die nachverfolgt werden. Die zulässigen Werte für diesen Parameter sind:
None
Constructor
Dispose
Finalizer
Method
Property
Delegates
Events
Exception
Lock
Error
Errors
Warning
Verbose
WriteLine
Data
Scope
ExecutionFlow
Assert
All
All
ist die Standardeinstellung.
Die folgenden Werte sind Kombinationen anderer Werte:
-
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 kombinieren, um mehrere Flags mithilfe dieses Parameters festzulegen. Die Werte können als Array von Werten oder als kommagetrennte Zeichenfolge dieser Werte an den Option Parameter übergeben werden. Das Cmdlet kombiniert die Werte mithilfe eines Binary-OR-Vorgangs. Das Übergeben von Werten als Array ist die einfachste Option und ermöglicht ihnen auch die Verwendung des Tabstopps für die Werte.
Typ: | PSTraceSourceOptions |
Zulässige Werte: | None, Constructor, Dispose, Finalizer, Method, Property, Delegates, Events, Exception, Lock, Error, Errors, Warning, Verbose, WriteLine, Data, Scope, ExecutionFlow, Assert, All |
Position: | 2 |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-PSHost
Gibt an, dass das Cmdlet die Ablaufverfolgungsausgabe an den PowerShell-Host sendet. Dieser Parameter wählt auch den PSHost-Ablaufverfolgungslistener aus.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
Sie können Objekte weiterleiten, die Eingaben für den Ausdruck an dieses Cmdlet darstellen.
Ausgaben
Dieses Cmdlet gibt keine eigene Ausgabe zurück. Der Ablaufverfolgungsbefehl gibt möglicherweise die Ausgabe zurück. Dieses Cmdlet schreibt die Befehlsablaufverfolgung in den Debugdatenstrom.
Hinweise
Die Ablaufverfolgung ist eine Methode, die Entwickler zum Debuggen und Verfeinern von Programmen verwenden. Bei der Ablaufverfolgung generiert das Programm detaillierte Meldungen zu den einzelnen Schritten in der internen Verarbeitung. Die PowerShell-Ablaufverfolgungs-Cmdlets sollen PowerShell-Entwickler unterstützen, aber sie sind für alle Benutzer verfügbar. Sie ermöglichen es Ihnen, nahezu jeden Aspekt der Funktionalität der Shell zu ü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 Benutzermodus- oder Kernelmodusdebugger, an den Host oder an die Konsole, an eine Datei oder an einen von der System.Diagnostics.TraceListener Klasse abgeleiteten benutzerdefinierten Listener senden.