Trace-Command
設定並開始追蹤指定的表達式或指令。
語法
expressionSet (預設值)
Trace-Command
[-Name] <String[]>
[[-Option] <PSTraceSourceOptions>]
[-Expression] <ScriptBlock>
[-InputObject <PSObject>]
[-ListenerOption <TraceOptions>]
[-FilePath <String>]
[-Force]
[-Debugger]
[-PSHost]
[<CommonParameters>]
commandSet
Trace-Command
[-Name] <String[]>
[[-Option] <PSTraceSourceOptions>]
[-Command] <String>
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-ListenerOption <TraceOptions>]
[-FilePath <String>]
[-Force]
[-Debugger]
[-PSHost]
[<CommonParameters>]
Description
Trace-Command指令小程式會設定並開始追蹤指定的表達式或指令。
它的運作方式類似 Set-TraceSource,但只適用於指定的指令。
範例
範例 1:追蹤元資料處理、參數綁定與表達式
此範例開始追蹤元資料處理、參數綁定,以及指令檔(cmdlet)對表達式 Get-Process Notepad 的建立與銷毀。
Trace-Command -Name Metadata, ParameterBinding, Cmdlet -Expression {Get-Process Notepad} -PSHost
它使用 Name 參數指定追蹤來源, Expression 參數指定指令, PSHost 參數將輸出傳送至主控台。 由於它沒有指定任何追蹤選項或監聽器選項,這個指令使用以下預設值:
- 全都是為了描摹選項
- 沒有聽眾選項
範例 2:追蹤參數綁定操作的動作
本範例追蹤 PowerShell 參數 綁定 操作在處理 Get-Alias 從管線輸入的表達式時的動作。
$A = "i*"
Trace-Command ParameterBinding {Get-Alias $input} -PSHost -InputObject $A
在 Trace-Command中, InputObject 參數會將物件傳給正在追蹤中處理的表達式。
第一個指令將字串 i* 儲存在變數中 $A 。 第二個指令使用 Trace-Command cmdlet 與 ParameterBinding trace 來源。
PSHost 參數會將輸出傳送到主控台。
正在處理的表達式為 Get-Alias $input,其中變 $input 數與 InputObject 參數相關聯。
InputObject 參數會將變數$A傳遞給表達式。 實際上,在追蹤過程中處理的指令為 Get-Alias -InputObject $A" or "$A | Get-Alias。
範例 3:原生指令的 Trace ParameterBinding 操作
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。
參數屬性
| 類型: | Object[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 參數 |
參數集
commandSet
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Command
指定在追蹤過程中正在處理的指令。
當你使用這個參數時,PowerShell 會像處理管線一樣處理指令。 例如,指令發現不會對每個進入的物件重複。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
commandSet
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Debugger
表示指令本會將追蹤輸出傳送到除錯器。 你可以在任何使用者模式或核心模式除錯器中查看輸出,或在 Visual Studio 中。 此參數同時選擇預設的追蹤監聽器。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Expression
指定在追蹤過程中正在處理的表達式。 以大括弧括住表達式({})。
參數屬性
| 類型: | ScriptBlock |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
expressionSet
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-FilePath
指定一個檔案,指令長子將追蹤輸出傳送到那裡。 此參數同時選擇檔案追蹤監聽器。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | PSPath, 路徑 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Force
強制命令執行,而不要求使用者確認。 搭配 FilePath 參數使用。 即使使用 Force 參數,Cmdlet 也無法覆蓋安全性限制。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-InputObject
指定在追蹤過程中處理的表達式輸入。 你可以輸入一個代表該表達式接受的輸入的變數,或是將物件傳遞到管線中。
參數屬性
| 類型: | PSObject |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ListenerOption
指定輸出中每個追蹤訊息前綴的可選資料。 此參數可接受的值為:
NoneLogicalOperationStackDateTimeTimestampProcessIdThreadIdCallstack
None 是預設值。
這些值會定義為旗標型列舉。 您可以將多個值結合在一起,以使用此參數來設定多個旗標。 這些值可以以數值陣列的形式傳遞到 ListenerOption 參數,或以逗號分隔的字串形式傳遞給 ListenerOption 參數。 Cmdlet 會使用二進位 OR 作業來合併值。 將值以陣列的形式傳遞是最簡單的選擇,還可以讓您在使用 Tab 鍵時自動完成值。
參數屬性
| 類型: | TraceOptions |
| 預設值: | None |
| 接受的值: | None, LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Name
指定一組可追蹤的 PowerShell 元件陣列。 輸入每個元件的追蹤來源名稱。 允許使用通配符。 要在電腦上找到追蹤來源,請輸入 Get-TraceSource。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Option
決定追蹤的事件類型。 此參數可接受的值為:
NoneConstructorDisposeFinalizerMethodPropertyDelegatesEventsExceptionLockErrorErrorsWarningVerboseWriteLineDataScopeExecutionFlowAssertAll
All 是預設值。
以下數值為其他數值的組合:
-
ExecutionFlow:Constructor, ,Dispose,MethodDelegatesEventsFinalizerScope -
Data:Constructor,Dispose, ,FinalizerProperty,Verbose, ,WriteLine -
Errors:Error、Exception
這些值會定義為旗標型列舉。 您可以將多個值結合在一起,以使用此參數來設定多個旗標。 這些值可以以數值陣列的形式傳遞給 Option 參數,或以逗號分隔的數值串形式傳遞。 Cmdlet 會使用二進位 OR 作業來合併值。 將值以陣列的形式傳遞是最簡單的選擇,還可以讓您在使用 Tab 鍵時自動完成值。
參數屬性
| 類型: | PSTraceSourceOptions |
| 預設值: | None |
| 接受的值: | None, Constructor, Dispose, Finalizer, Method, Property, Delegates, Events, Exception, Lock, Error, Errors, Warning, Verbose, WriteLine, Data, Scope, ExecutionFlow, Assert, All |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 2 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-PSHost
表示 cmdlet 會將追蹤輸出傳送到 PowerShell 主機。 此參數同時選擇 PSHost 追蹤監聽器。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
PSObject
你可以將代表輸入到這個 cmdlet 的物件管道。
輸出
PSObject
此指令檔不會回傳自身輸出。 追蹤指令可能會回傳輸出。 此 cmdlet 會將指令追蹤寫入除錯串流。
備註
追蹤是一種開發者用來除錯和優化程式的方法。 在追蹤時,程式會針對內部處理的每個步驟產生詳細訊息。 PowerShell 追蹤 cmdlet 是為了幫助 PowerShell 開發者而設計,但它們對所有使用者開放。 它們讓你幾乎能監控 shell 功能的每個面向。
追蹤來源是每個 PowerShell 元件中負責追蹤並產生該元件追蹤訊息的部分。 要追蹤一個元件,你必須找出它的追蹤來源。
請使用 Get-TraceSource 以查看啟用追蹤的 PowerShell 元件清單。
追蹤監聽器接收追蹤的輸出,並顯示給使用者。 你可以選擇將追蹤資料傳送到使用者模式或核心模式除錯器、主機或主控台、檔案,或是由 System.Diagnostics.TraceListener 類別衍生的自訂監聽器。