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 [-Expression] <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 |
-Expression <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-HelpGet-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" 或 "$a | get-alias"。