Trace-Command

配置并启动对指定表达式或命令的跟踪。

语法

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>]

说明

cmdlet Trace-Command 配置并启动指定表达式或命令的跟踪。 其工作方式与 Set-TraceSource 相似,但仅适用于指定的命令。

示例

示例 1:跟踪元数据处理、参数绑定和表达式

此示例开始跟踪元数据处理、参数绑定以及创建和销毁表达式的 Get-Process Notepad cmdlet。

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

它使用 Name 参数指定跟踪源, 使用 Expression 参数指定命令,使用 PSHost 参数将输出发送到控制台。 由于它未指定任何跟踪选项或侦听器选项,因此该命令使用默认值:

  • 跟踪选项的“全部”
  • 对于侦听器选项,无

示例 2:跟踪 ParameterBinding 操作

此示例跟踪 PowerShell 的 ParameterBinding 操作的操作,同时处理 Get-Alias 从管道获取输入的表达式。

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

在 中 Trace-CommandInputObject 参数将对象传递给跟踪期间正在处理的表达式。

第一个命令将字符串 i* 存储在 变量中 $A 。 第二个命令将 Trace-Command cmdlet 与 ParameterBinding 跟踪源配合使用。 PSHost 参数将输出发送到控制台。

正在处理的表达式为 Get-Alias $Input,其中 $Input 变量与 InputObject 参数相关联。 InputObject 参数将变量$A传递给表达式。 实际上,在跟踪期间处理的命令是 Get-Alias -InputObject $A" or "$A | Get-Alias

示例 3:本机命令的跟踪参数绑定操作

PowerShell 7.3 添加了跟踪本机命令的参数绑定的功能。 以下示例演示 PowerShell 如何分析本机命令 TestExe的命令行参数。

$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

参数

-ArgumentList

为要跟踪的命令指定参数和参数值。 ArgumentList 的别名是 Args。 此功能可用于调试动态参数。

有关 ArgumentList 行为的详细信息,请参阅 about_Splatting

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

-Command

指定跟踪期间正在处理的命令。

使用此参数时,PowerShell 处理命令就像在管道中处理一样。 例如,不会为每个传入对象重复命令发现。

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

-Debugger

指示 cmdlet 将跟踪输出发送到调试程序。 可以在任何用户模式或内核模式调试程序或者 Visual Studio 中查看输出。 此参数还将选择默认的跟踪侦听器。

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

-Expression

指定跟踪期间正在处理的表达式。 将表达式括在大括号 ({}) 。

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

-FilePath

指定 cmdlet 将跟踪输出发送到的文件。 此参数还将选择文件跟踪侦听器。

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

-Force

强制运行命令而不要求用户确认。 与 FilePath 参数一起使用。 即使使用 Force 参数,cmdlet 也无法覆盖安全限制。

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

-InputObject

指定对跟踪期间正在处理的表达式的输入。 可以输入表示表达式接受的输入的变量,或通过管道传递对象。

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

-ListenerOption

向输出中的每条跟踪消息的前缀指定可选数据。 此参数的可接受值为:

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

None 是默认值。

这些值定义为基于标志的枚举。 可以使用此参数将多个值组合在一起以设置多个标志。 这些值可以作为值的数组或这些值的逗号分隔字符串传递给 ListenerOption 参数。 cmdlet 将使用二进制 OR 操作合并这些值。 将值作为数组传递是最简单的选项,还允许对值使用 Tab 补全。

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

指定跟踪的 PowerShell 组件的数组。 请输入各个组件的跟踪源的名称。 允许使用通配符。 若要在计算机上查找跟踪源,请键入 Get-TraceSource

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

-Option

确定要跟踪的事件的类型。 此参数的可接受值为:

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

All 是默认值。

以下值是其他值的组合:

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

这些值定义为基于标志的枚举。 可以使用此参数将多个值组合在一起以设置多个标志。 这些值可以作为值的数组或这些值的逗号分隔字符串传递给 Option 参数。 cmdlet 将使用二进制 OR 操作合并这些值。 将值作为数组传递是最简单的选项,还允许对值使用 Tab 补全。

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

指示 cmdlet 将跟踪输出发送到 PowerShell 主机。 此参数还将选择 PSHost 跟踪侦听器。

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

输入

PSObject

可以通过管道将表示输入的对象传递给此 cmdlet。

输出

PSObject

此 cmdlet 不返回其自己的输出。 跟踪的命令可能会返回输出。 此 cmdlet 将命令跟踪写入调试流。

备注

跟踪是开发人员用于调试和优化程序的一种方法。 在跟踪过程中,程序将生成有关其内部处理过程中每个步骤的详细消息。 PowerShell 跟踪 cmdlet 旨在帮助 PowerShell 开发人员,但所有用户都可以使用它们。 使用这些 cmdlet,你可以监视 shell 功能的几乎每个方面。

跟踪源是管理跟踪并为组件生成跟踪消息的每个 PowerShell 组件的一部分。 若要跟踪某个组件,你应标识其跟踪源。

使用 Get-TraceSource 查看已启用跟踪的 PowerShell 组件列表。

跟踪侦听器接收跟踪的输出并将其显示给用户。 可以选择将跟踪数据发送到用户模式或内核模式调试器、主机或控制台、文件或派生自 System.Diagnostics.TraceListener 类的自定义侦听器。