ค้นหาเว็บไซต์

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

ระบุข้อมูลที่เป็นทางเลือกให้กับคำนำหน้าของแต่ละข้อความการติดตามในเอาต์พุต ค่าที่ยอมรับได้สำหรับพารามิเตอร์นี้คือ:

    None
    LogicalOperationStack
    DateTime
    Timestamp
    ProcessId
    ThreadId
    Callstack

ไม่มี เป็นค่าเริ่มต้น

ค่าเหล่านี้ถูกกำหนดเป็นการแจงนับตามแฟล็ก คุณสามารถรวมค่าหลายค่าเข้าด้วยกันเพื่อตั้งค่าแฟล็กหลายรายการโดยใช้พารามิเตอร์นี้ ค่าสามารถส่งผ่านไปยังพารามิเตอร์ ListenerOption เป็นอาร์เรย์ของค่าหรือเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาคของค่าเหล่านั้น cmdlet จะรวมค่าต่างๆ โดยใช้การดำเนินการแบบไบนารี่หรือ การส่งค่าเป็นอาร์เรย์เป็นตัวเลือกที่ง่ายที่สุด และยังช่วยให้คุณใช้การเติมแท็บกับค่าได้อีกด้วย

พิมพ์ :

TraceOptions

ค่าที่ยอมรับ:

ไม่มี, LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-Name

ระบุอาร์เรย์ของส่วนประกอบ PowerShell ที่ถูกติดตาม ป้อนชื่อของแหล่งติดตามของแต่ละส่วนประกอบ อนุญาตให้ใช้ไวด์การ์ดได้ หากต้องการค้นหาแหล่งที่มาของการติดตามบนคอมพิวเตอร์ของคุณ ให้พิมพ์ Get-TraceSource

พิมพ์ :

String[]

ตำแหน่ง:

0

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-Option

กำหนดประเภทของเหตุการณ์ที่จะติดตาม ค่าที่ยอมรับได้สำหรับพารามิเตอร์นี้คือ:

    None
    Constructor
    Dispose
    Finalizer
    Method
    Property
    Delegates
    Events
    Exception
    Lock
    Error
    Errors
    Warning
    Verbose
    WriteLine
    Data
    Scope
    ExecutionFlow
    Assert
    All

ทั้งหมด เป็นค่าเริ่มต้น

ค่าต่อไปนี้เป็นค่าผสมของค่าอื่นๆ:

  • 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 .

บทความที่เกี่ยวข้อง