Trace-Command

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

语法

Trace-Command [-Command] <string> [-ArgumentList <Object[]>] [-Name] <string[]> [[-Option] {<None> | <Constructor> | <Dispose> | <Finalizer> | <Method> | <Property> | <Delegates> | <Events> | <Exception> | <Lock> | <Error> | <Errors> | <Warning> | <Verbose> | <WriteLine> | <Data> | <Scope> | <ExecutionFlow> | <Assert> | <All>}] [-Debugger] [-FilePath <string>] [-Force] [-InputObject <psobject>] [-ListenerOption {<None> | <LogicalOperationStack> | <DateTime> | <Timestamp> | <ProcessId> | <ThreadId> | <Callstack>}] [-PSHost] [<CommonParameters>]

Trace-Command [-表达式] <scriptblock> [-Name] <string[]> [[-Option] {<None> | <Constructor> | <Dispose> | <Finalizer> | <Method> | <Property> | <Delegates> | <Events> | <Exception> | <Lock> | <Error> | <Errors> | <Warning> | <Verbose> | <WriteLine> | <Data> | <Scope> | <ExecutionFlow> | <Assert> | <All>}] [-Debugger] [-FilePath <string>] [-Force] [-InputObject <psobject>] [-ListenerOption {<None> | <LogicalOperationStack> | <DateTime> | <Timestamp> | <ProcessId> | <ThreadId> | <Callstack>}] [-PSHost] [<CommonParameters>]

说明

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

参数

-ArgumentList <Object[]>

为要跟踪的命令指定参数和参数值。ArgumentList 的别名为 Args。对于调试动态参数,此功能尤其有用。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Command <string>

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

是否为必需?

true

位置?

2

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Debugger

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

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-表达式 <scriptblock>

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

是否为必需?

true

位置?

2

默认值

是否接受管道输入?

false

是否接受通配符?

false

-FilePath <string>

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

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Force

允许该 cmdlet 将跟踪信息追加到只读文件。与 FilePath 参数一起使用。即使使用 Force 参数,该 cmdlet 也无法覆盖安全限制。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-InputObject <psobject>

为要在跟踪期间处理的表达式提供输入。

可以输入表示表达式接受的输入的变量,或通过管道传递对象。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

true (ByValue)

是否接受通配符?

false

-ListenerOption <TraceOptions>

向输出中的每条跟踪消息的前缀添加可选数据。有效值包括 None、LogicalOperationStack、DateTime、Timestamp、ProcessId、ThreadId 和 Callstack。“None”为默认值。

若要指定多个选项,请使用逗号分隔这些选项,但不要带有空格,并将这些选项括在引号中,例如 "ProcessID,ThreadID"。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Name <string[]>

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

是否为必需?

true

位置?

1

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Option <PSTraceSourceOptions>

确定要跟踪的事件的类型。

有效值包括 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)。

若要指定多个选项,请使用逗号分隔这些选项,但不要带有空格,并将这些选项括在引号中,例如 "Constructor,Dispose"。

是否为必需?

false

位置?

3

默认值

是否接受管道输入?

false

是否接受通配符?

false

-PSHost

将跟踪输出发送到 Windows PowerShell 主机。此参数还将选择 PSHost 跟踪侦听程序。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

<CommonParameters>

此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

System.Management.Automation.PSObject

可以通过管道将表示表达式输入的对象传递给 Trace-Command。

输出

System.Management.Automation.PSObject

在调试流中返回命令跟踪。

说明

跟踪是开发人员用于调试和优化程序的一种方法。在跟踪过程中,程序将生成有关其内部处理过程中每个步骤的详细消息。

Windows PowerShell 跟踪 cmdlet 专为帮助 Windows PowerShell 开发人员而设计,但其可供所有用户使用。使用这些 cmdlet,您可以监控外壳程序功能的几乎每个方面。

若要查找已为跟踪启用的 Windows PowerShell 组件,请键入“Get-Help Get-TraceSource”。

“跟踪源”是每个 Windows PowerShell 组件的一部分,用于管理跟踪和生成该组件的跟踪消息。若要跟踪某个组件,您应标识其跟踪源。

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

使用 Command 参数集时,Windows PowerShell 将采用与在管道中处理命令相似的方式来处理该命令。例如,不对每个传入对象重复执行命令发现。

Name、Expression、Option 和 Command 参数的名称为可选项。如果省略参数名称,则未命名参数的值必须按以下顺序出现:Name、Expression、Option 或 Name、Command、-Option。如果包括参数名称,则参数能够以任何顺序出现。

示例 1

C:\PS>trace-command -name metadata,parameterbinding,cmdlet -expression {get-process notepad} -pshost

说明
-----------
此命令启动对“get-process notepad”表达式的元数据处理、参数绑定以及 cmdlet 创建和破坏的跟踪。它使用 Name 参数来指定跟踪源、使用 Expression 参数来指定命令,并使用 PSHost 参数来将输出发送到控制台。由于该命令未指定任何跟踪选项或侦听程序选项,因此它会将默认值“All”用作跟踪选项,并将“None”用作侦听程序选项。





示例 2

C:\PS>trace-command -name commandprocessor,pipelineprocessor -command get-alias -argumentlist "ghy" -option executionflow -listenerOption "timestamp,callstack" -filepath c:\test\debug.txt

说明
-----------
此命令启动对处理“get-alias cd”命令过程中命令处理程序和管道处理程序的跟踪。

它使用 Name 参数来指定跟踪源、使用 Command 参数来指定命令、使用 ArgumentList 参数来指定 Get-Alias 命令的参数、使用 Option 参数来指定跟踪选项,并使用 ListenerOption 参数来指定跟踪消息前缀中的字段。FilePath 参数将输出发送到 C:\Test\Debug.txt 文件。





示例 3

C:\PS>$a = "i*"

C:\PS> trace-command parameterbinding {get-alias $input} -pshost -inputobject $a

说明
-----------
这些命令跟踪在 Windows PowerShell 处理从管道中获取输入的 Get-Alias 表达式时其 ParameterBinding 操作的过程。

在 Trace-Command 中,InputObject 参数将对象传递给要在跟踪期间处理的表达式。

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

要处理的表达式为“get-alias $input”,其中 $input 变量与 InputObject 参数相关联。InputObject 参数将变量 $a 传递给该表达式。实际上,在跟踪期间要处理的命令是“get-alias -inputobject $a" or "$a | get-alias”。





另请参阅

概念

Get-TraceSource
Set-TraceSource