Trace-Command (Microsoft.PowerShell.Utility)
Trace-Command
- โมดูล :
- Microsoft.PowerShell.Utility
กำหนดค่าและเริ่มการติดตามนิพจน์หรือคำสั่งที่ระบุ
ไวยากรณ์
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>]คำอธิบาย
Trace-Command cmdlet กำหนดค่าและเริ่มการติดตามของนิพจน์หรือคำสั่งที่ระบุ ทำงานเหมือนกับ Set-TraceSource ยกเว้นว่าจะใช้กับคำสั่งที่ระบุเท่านั้น
ตัวอย่าง
ตัวอย่างที่ 1: ติดตามการประมวลผลข้อมูลเมตา การเชื่อมโยงพารามิเตอร์ และนิพจน์
ตัวอย่างนี้เริ่มต้นการติดตามของการประมวลผลข้อมูลเมตา การเชื่อมโยงพารามิเตอร์ และการสร้าง cmdlet และการทำลายนิพจน์ Get-Process Notepad
Trace-Command -Name metadata,parameterbinding,cmdlet -Expression {Get-Process Notepad} -PSHostโดยจะใช้พารามิเตอร์ ชื่อ เพื่อระบุแหล่งที่มาของการติดตาม พารามิเตอร์ นิพจน์ เพื่อระบุคำสั่ง และพารามิเตอร์ PSHost เพื่อส่งเอาต์พุตไปยัง คอนโซล เนื่องจากไม่ได้ระบุตัวเลือกการติดตามหรือตัวเลือก Listener คำสั่งจึงใช้ค่าดีฟอลต์:
- ทั้งหมดสำหรับตัวเลือกการติดตาม
- ไม่มีสำหรับตัวเลือกผู้ฟัง
ตัวอย่างที่ 2: ติดตามการดำเนินการของการดำเนินการ ParameterBinding
ตัวอย่างนี้จะติดตามการดำเนินการของการดำเนินการ ParameterBinding ของ PowerShell ในขณะที่ประมวลผลนิพจน์ Get-Alias ที่รับอินพุตจากไปป์ไลน์
$A = "i*"
Trace-Command ParameterBinding {Get-Alias $Input} -PSHost -InputObject $A
ใน Trace-Command พารามิเตอร์ InputObject จะส่งผ่านออบเจ็กต์ไปยังนิพจน์ที่กำลังประมวลผลในระหว่างการติดตาม
คำสั่งแรกเก็บสตริง i* ไว้ในตัวแปร $A คำสั่งที่สองใช้ Trace-Command cmdlet กับแหล่งการติดตาม ParameterBinding พารามิเตอร์ PSHost จะส่งเอาต์พุตไปยังคอนโซล
นิพจน์ที่กำลังประมวลผลคือ Get-Alias $Input โดยที่ตัวแปร $Input เชื่อมโยงกับพารามิเตอร์ InputObject พารามิเตอร์ InputObject ส่งตัวแปร $A ไปยังนิพจน์ คำสั่งที่กำลังประมวลผลระหว่างการติดตามคือ Get-Alias -InputObject $A" หรือ "$A | รับ-นามแฝง.
ตัวอย่างที่ 3: ติดตามการดำเนินการ 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[]
- นามแฝง :
Args
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
-
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Command
ระบุคำสั่งที่กำลังประมวลผลระหว่างการติดตาม
เมื่อคุณใช้พารามิเตอร์นี้ PowerShell จะประมวลผลคำสั่งเหมือนกับที่จะถูกประมวลผลในไปป์ไลน์ ตัวอย่างเช่น การค้นหาคำสั่งจะไม่ทำซ้ำสำหรับแต่ละอ็อบเจ็กต์ที่เข้ามา
- พิมพ์ :
String
- ตำแหน่ง:
1
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
-
False
-Debugger
บ่งชี้ว่า cmdlet ส่งผลลัพธ์การติดตามไปยังดีบักเกอร์ คุณสามารถดูผลลัพธ์ในโหมดผู้ใช้หรือดีบักเกอร์โหมดเคอร์เนลหรือใน Visual Studio พารามิเตอร์นี้ยังเลือก Listener การติดตามดีฟอลต์อีกด้วย
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Expression
ระบุนิพจน์ที่กำลังประมวลผลระหว่างการติดตาม ใส่นิพจน์ในวงเล็บปีกกา ({})
- พิมพ์ :
ScriptBlock
- ตำแหน่ง:
1
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-FilePath
ระบุไฟล์ที่ cmdlet ส่งผลลัพธ์การติดตามไป พารามิเตอร์นี้ยังเลือก Listener การติดตามไฟล์ด้วย
- พิมพ์ :
String
- นามแฝง :
PSPath, Path
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Force
บังคับให้คำสั่งทำงานโดยไม่ต้องขอการยืนยันจากผู้ใช้ ใช้กับพารามิเตอร์ FilePath แม้ว่าจะใช้พารามิเตอร์ Force แต่ cmdlet ก็ไม่สามารถแทนที่ข้อจำกัดด้านความปลอดภัยได้
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-InputObject
ระบุอินพุตให้กับนิพจน์ที่กำลังประมวลผลระหว่างการติดตาม คุณสามารถป้อนตัวแปรที่แสดงถึงข้อมูลเข้าที่นิพจน์ยอมรับ หรือส่งวัตถุผ่านไปป์ไลน์ได้
- พิมพ์ :
PSObject
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
False
-ListenerOption
ระบุข้อมูลที่เป็นทางเลือกให้กับคำนำหน้าของแต่ละข้อความการติดตามในเอาต์พุต ค่าที่ยอมรับได้สำหรับพารามิเตอร์นี้คือ:
NoneLogicalOperationStackDateTimeTimestampProcessIdThreadIdCallstackไม่มี เป็นค่าเริ่มต้น
ค่าเหล่านี้ถูกกำหนดเป็นการแจงนับตามแฟล็ก คุณสามารถรวมค่าหลายค่าเข้าด้วยกันเพื่อตั้งค่าแฟล็กหลายรายการโดยใช้พารามิเตอร์นี้ ค่าสามารถส่งผ่านไปยังพารามิเตอร์ ListenerOption เป็นอาร์เรย์ของค่าหรือเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาคของค่าเหล่านั้น cmdlet จะรวมค่าต่างๆ โดยใช้การดำเนินการแบบไบนารี่หรือ การส่งค่าเป็นอาร์เรย์เป็นตัวเลือกที่ง่ายที่สุด และยังช่วยให้คุณใช้การเติมแท็บกับค่าได้อีกด้วย
- พิมพ์ :
TraceOptions
- ค่าที่ยอมรับ:
ไม่มี, LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Name
ระบุอาร์เรย์ของส่วนประกอบ PowerShell ที่ถูกติดตาม ป้อนชื่อของแหล่งติดตามของแต่ละส่วนประกอบ อนุญาตให้ใช้ไวด์การ์ดได้ หากต้องการค้นหาแหล่งที่มาของการติดตามบนคอมพิวเตอร์ของคุณ ให้พิมพ์ Get-TraceSource
- พิมพ์ :
String[]
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Option
กำหนดประเภทของเหตุการณ์ที่จะติดตาม ค่าที่ยอมรับได้สำหรับพารามิเตอร์นี้คือ:
NoneConstructorDisposeFinalizerMethodPropertyDelegatesEventsExceptionLockErrorErrorsWarningVerboseWriteLineDataScopeExecutionFlowAssertAllทั้งหมด เป็นค่าเริ่มต้น
ค่าต่อไปนี้เป็นค่าผสมของค่าอื่นๆ:
ExecutionFlow:Constructor,Dispose,Finalizer,Method,Delegates,เหตุการณ์,ขอบเขตข้อมูล:Constructor,Dispose,Finalizer,Property,Verbose,WriteLineข้อผิดพลาด:ข้อผิดพลาด,ข้อยกเว้น
ค่าเหล่านี้ถูกกำหนดเป็นการแจงนับตามแฟล็ก คุณสามารถรวมค่าหลายค่าเข้าด้วยกันเพื่อตั้งค่าแฟล็กหลายรายการโดยใช้พารามิเตอร์นี้ ค่าสามารถส่งผ่านไปยังพารามิเตอร์ ตัวเลือก เป็นอาร์เรย์ของค่าหรือเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาคของค่าเหล่านั้น cmdlet จะรวมค่าต่างๆ โดยใช้การดำเนินการแบบไบนารี่หรือ การส่งค่าเป็นอาร์เรย์เป็นตัวเลือกที่ง่ายที่สุด และยังช่วยให้คุณใช้การเติมแท็บกับค่าได้อีกด้วย
- พิมพ์ :
ตัวเลือก PSTraceSource
- ค่าที่ยอมรับ:
ไม่มี ตัวสร้าง การกำจัด Finalizer วิธีการ คุณสมบัติ ผู้รับมอบสิทธิ์ เหตุการณ์ ข้อยกเว้น ล็อค ข้อผิดพลาด ข้อผิดพลาด คำเตือน Verbose WriteLine ข้อมูล ขอบเขต ExecutionFlow ยืนยัน ทั้งหมด
- ตำแหน่ง:
2
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-PSHost
บ่งชี้ว่า cmdlet ส่งผลลัพธ์การติดตามไปยังโฮสต์ PowerShell พารามิเตอร์นี้ยังเลือก Listener การติดตาม PSHost ด้วย
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
อินพุต
PSObject
คุณสามารถไปป์วัตถุที่แสดงถึงอินพุตไปยังนิพจน์ไปยัง cmdlet นี้
เอาท์พุต
PSObject
cmdlet นี้ไม่ส่งคืนผลลัพธ์ของตัวเอง คำสั่งที่ติดตามอาจส่งคืนเอาต์พุต cmdlet นี้เขียนการติดตามคำสั่งไปยังสตรีมการตรวจแก้จุดบกพร่อง
หมายเหตุ
การติดตามเป็นวิธีการที่นักพัฒนาใช้ในการดีบักและปรับแต่งโปรแกรม เมื่อติดตาม โปรแกรมจะสร้างข้อความโดยละเอียดเกี่ยวกับแต่ละขั้นตอนในการประมวลผลภายใน cmdlet การติดตามของ PowerShell ได้รับการออกแบบมาเพื่อช่วยเหลือนักพัฒนา PowerShell แต่ผู้ใช้ทุกคนก็สามารถใช้งานได้ ช่วยให้คุณสามารถตรวจสอบการทำงานของเชลล์ได้เกือบทุกด้าน
แหล่งที่มาของการติดตามเป็นส่วนหนึ่งของแต่ละส่วนประกอบ PowerShell ที่จัดการการติดตามและสร้างข้อความการติดตามสำหรับส่วนประกอบ ในการติดตามส่วนประกอบ คุณต้องระบุแหล่งที่มาของการติดตาม
ใช้ Get-TraceSource เพื่อดูรายการส่วนประกอบ PowerShell ที่เปิดใช้งานสำหรับการติดตาม
Listener การติดตามจะได้รับเอาต์พุตของการติดตามและแสดงให้ผู้ใช้เห็น คุณสามารถเลือกที่จะส่งข้อมูลการติดตามไปยังโหมดผู้ใช้หรือดีบักเกอร์โหมดเคอร์เนล ไปยังโฮสต์หรือคอนโซล ไปยังไฟล์ หรือไปยัง Listener แบบกำหนดเองที่ได้รับมาจากคลาส System.Diagnostics.TraceListener .