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”。