สคริปต์ PowerShell แสดงคำสั่งที่เรียกใช้


36

ฉันกำลังเล่นกับสคริปต์ PowerShell และพวกเขาทำงานได้ดี อย่างไรก็ตามฉันสงสัยว่ามีวิธีใดที่จะแสดงคำสั่งทั้งหมดที่ทำงานเช่นเดียวกับที่คุณพิมพ์ด้วยตนเองในตัวเอง สิ่งนี้จะคล้ายกับ "echo on" ในไฟล์แบตช์ ฉันดูอาร์กิวเมนต์บรรทัดคำสั่ง PowerShell, cmdlets แต่ฉันไม่พบสิ่งใดที่ชัดเจน ขอบคุณ!

คำตอบ:


44

คำสั่งต่อไปนี้จะส่งออกแต่ละบรรทัดของสคริปต์เพื่อเขียนการดีบัก

Set-PSDebug -Trace 1

จาก man Set-PSDebug

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


หากคุณเพิ่มสิ่งนี้ลงในสคริปต์ที่ใช้Paramตรวจสอบให้แน่ใจว่าวางบรรทัดนี้ใต้บล็อกที่กำหนดพารามิเตอร์หรืออาจทำให้เกิดความล้มเหลว
kayleeFrye_onDeck

4

ที่ฉันใช้echo onใน CMD ตอนนี้ฉันใช้Write-VerboseและSet-PSDebug -Stepแทน พวกมันไม่เหมือนกัน แต่มีพลังมากกว่าถ้าใช้อย่างชำนาญ


2

น่าเกลียด:

PS > get-content foo.ps1|foreach-object{$_;invoke-expression "$_"}
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
powershell
PS > get-content foo.ps1
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
PS >

ปัญหาข้างต้นคือถ้าคุณมีคำสั่งหลายบรรทัดเช่นนี้:

foreach($proc in $procs){
  $proc.processname
}

ด้านบนจะล้มเหลวด้วยตัวอย่างของฉันด้านบนหากมันอยู่ใน foo.ps1 ที่มีโครงสร้างนั้น ...


ใช่ฉันหาวิธีแก้ปัญหาแบบนี้ต่อไปเรื่อย ๆ ฉันคิดว่าไม่มี "กระสุนเงิน" สำหรับสิ่งที่ฉันต้องการ ขอบคุณที่คิดสร้างสรรค์ด้วยโซลูชั่นเหล่านี้ ฉันมีตัวเลือกสองสามตัวในขณะนี้และจะต้องตัดสินใจว่าจะไปจากที่นี่
Nelson Rothermel

2
help about_History 

จะบอกคุณเกี่ยวกับคำสั่งทั้งหมดและ

Get-History [options]  

จะส่งคืนรายการทั้งหมดเพื่อให้คุณสามารถจัดการ \ display ฯลฯ


2
ฉันพบ "set-psdebug -trace 1" ซึ่งจะแสดงคำสั่ง แต่มี "เสียงรบกวน" พิเศษมากมายที่ฉันไม่ต้องการ รับประวัติไม่ได้ส่งออกอะไรในสคริปต์ ถ้ามันทำให้ฉันสามารถติดมันในตอนท้ายของสคริปต์ แต่คำสั่งจะไม่อยู่ในบรรทัด (ก่อนที่จะออกคำสั่ง) และข้อยกเว้นใด ๆ ที่จะข้ามมัน (เว้นแต่ฉันจะจับมันแน่นอน) ยังคงเป็นสิ่งที่ดีที่จะจำไว้ ... ความคิดอื่น ๆ ?
Nelson Rothermel

อ้า - คุณหมายถึงว่าคุณต้องการที่จะจับภาพอินพุทและเอาท์พุทหรืออย่างน้อยคุณต้องการที่จะสะท้อนคำสั่งอินพุตตามทันทีโดยการส่งออกที่สอดคล้องกัน? วิธีหนึ่งในการทำเช่นนั้นคือการผลักผลลัพธ์ลงในอาร์เรย์จากนั้นวนซ้ำผ่านผลลัพธ์ที่ได้รับประวัติเอาท์พุทคำสั่งตามด้วยเอาต์พุต
Helvick

start-transcript อาจทำสิ่งที่คุณกำลังมองหา แต่จะถูก จำกัด เฉพาะส่วนข้อความคอนโซลของการดำเนินการเท่านั้น
Helvick

คุณได้รับ - เช่นเดียวกับไฟล์แบตช์ที่ใช้งานได้ เรามีไฟล์แบทช์จำนวนมากในตอนนี้และฉันกำลังดูความเป็นไปได้ในการแทนที่ไฟล์เหล่านั้นด้วยสคริปต์ PowerShell เรามีซอฟต์แวร์สำหรับการตั้งเวลารักษาประวัติเอาท์พุทและอื่น ๆ หากไม่มีคำสั่งอินพุตถูกสะท้อนมันยากที่จะดีบั๊ก ฉันเดาว่าการกดผลลัพธ์จะทำให้คุณต้องทำอย่างนั้นทุกคำสั่งตรวจสอบให้แน่ใจว่าคุณได้รับข้อยกเว้น ฯลฯ ดังนั้นคุณจะไม่พลาดอะไรเลย ตัวเลือกอื่น แต่ไม่ใช่สิ่งที่ฉันกำลังมองหา เราอาจต้องเลือกหนึ่งตัวเลือกและเรียกใช้ด้วย
เนลสันโรเธอร์เมล

ฉันลอง start-transcript แต่มันเพิ่งบันทึกว่ามันเริ่ม / หยุดทำงาน แต่ไม่มีอะไรเกิดขึ้นระหว่างนั้น ฉันอ่านบางที่มันมีไว้สำหรับคำสั่งแบบโต้ตอบ
เนลสันโรเธอร์เมล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.