ฉันต้องการส่งออกตัวแปรและค่าในสคริปต์PowerShellโดยการตั้งค่าสถานะและดูข้อมูลการบวชตลอดทั้งสคริปต์
ฉันจะทำสิ่งนี้ได้อย่างไร
ตัวอย่างเช่น PowerShell จะเทียบเท่ากับโค้ด PHP ต่อไปนี้คืออะไร
echo "filesizecounter: " . $filesizecounter
ฉันต้องการส่งออกตัวแปรและค่าในสคริปต์PowerShellโดยการตั้งค่าสถานะและดูข้อมูลการบวชตลอดทั้งสคริปต์
ฉันจะทำสิ่งนี้ได้อย่างไร
ตัวอย่างเช่น PowerShell จะเทียบเท่ากับโค้ด PHP ต่อไปนี้คืออะไร
echo "filesizecounter: " . $filesizecounter
คำตอบ:
มีหลายวิธี:
Write-Host
: เขียนโดยตรงไปยังคอนโซลไม่รวมอยู่ในฟังก์ชั่น / เอาต์พุต cmdlet อนุญาตให้ตั้งค่าสีพื้นหน้าและพื้นหลัง
Write-Debug
: เขียนโดยตรงไปยังคอนโซลหาก$DebugPreference
ตั้งค่าเป็นดำเนินการต่อหรือหยุด
Write-Verbose
: เขียนโดยตรงไปยังคอนโซลหาก$VerbosePreference
ตั้งค่าเป็นดำเนินการต่อหรือหยุด
หลังมีไว้สำหรับข้อมูลเพิ่มเติมที่เป็นทางเลือกWrite-Debug
สำหรับการดีบั๊ก
เพิ่มเติม : ในสคริปต์ PSH2 (อย่างน้อย) การใช้ cmdlet binding จะได้รับ-Verbose
และ-Debug
เปลี่ยนพารามิเตอร์โดยอัตโนมัติการเปิดใช้งานแบบโลคัลWrite-Verbose
และWrite-Debug
(เช่นการแทนที่ตัวแปรการกำหนดค่าตามความชอบ) เช่นเดียวกับ cmdlet ที่รวบรวมและตัวให้บริการทำ
Powershell มีนามแฝงการแมป echo ไปที่Write-Output
:
echo "filesizecounter : $filesizecounter"
PowerShell สอดแทรกใช่ไหม?
ใน PHP
echo "filesizecounter: " . $filesizecounter
สามารถเขียนเป็น:
echo "filesizecounter: $filesizecounter"
ใน PowerShell บางสิ่งเช่นนี้ควรเหมาะกับความต้องการของคุณ:
Write-Host "filesizecounter: $filesizecounter"
Write-Host "filesizecounter : " $filesizecounter
โดยวิธีที่ง่ายที่สุดในการ echo ใน powershell เพียงแค่สร้างวัตถุสตริงและปล่อยให้มันไปป์ไลน์:
$filesizecounter = 8096
"filesizecounter : $filesizecounter"
แน่นอนว่าคุณต้องยอมแพ้เมื่อไม่ได้ใช้เมธอด Write- *
ก้องเป็นนามแฝงที่จะเขียนเอาท์พุทแม้ว่ามันจะมีลักษณะเช่นเดียวกับการเขียนโฮสต์
มันไม่ใช่ความแตกต่างระหว่าง echo และ Write-Host ใน PowerShell คืออะไร? .
echo เป็นนามแฝงสำหรับ Write-Output ซึ่งเขียนไปยังสตรีมเอาต์พุตความสำเร็จ สิ่งนี้อนุญาตให้ประมวลผลเอาต์พุตผ่านไพพ์ไลน์หรือเปลี่ยนเส้นทางไปยังไฟล์ เขียนโฮสต์เขียนโดยตรงไปยังคอนโซลดังนั้นเอาต์พุตไม่สามารถเปลี่ยนเส้นทาง / ประมวลผลเพิ่มเติมได้
การเขียนโฮสต์ทำงานได้ดี
$Filesize = (Get-Item $filepath).length;
Write-Host "FileSize= $filesize";
ฉันไม่รู้ว่าควรทำเช่นนั้นหรือไม่ แต่คุณสามารถเขียนได้
"filesizecounter: " + $filesizecounter
และมันควรจะออก:
filesizecounter: ค่า
"filesizecounter: $filesizecounter"
สั้นกว่า
PowerShell echo
มีนามแฝงสำหรับคำสั่งทั่วไปหลายประการเช่น พิมพ์ต่อไปนี้ใน PowerShell:
Get-Alias echo
เพื่อรับการตอบกลับ:
CommandType Name Version Source
----------- ---- ------- ------
Alias echo -> Write-Output
แม้จะได้รับการบริการ Alias gal -> Get-Alias
มีนามแฝง คุณสามารถเขียนgal echo
เพื่อรับนามแฝงecho
ได้
gal echo
นามแฝงอื่น ๆ มีการระบุไว้ที่นี่: https://docs.microsoft.com/en-us/powershell/scripting/learn/using-familiar-command-names?view=powershell-6
cat dir mount rm cd echo move rmdir chdir erase popd sleep clear h ps sort cls history pushd tee copy kill pwd type del lp r write diff ls ren
ลองGet-Content .\yourScript.PS1
แล้วคุณจะเห็นเนื้อหาของสคริปต์ของคุณ
นอกจากนี้คุณสามารถแทรกบรรทัดนี้ในโค้ดของคุณ:
get-content .\scriptname.PS1
script code
script code
....
มันควรจะกล่าวถึงด้วยว่าSet-PSDebugนั้นคล้ายกับecho on
ชุดคำสั่งแบบเก่า:
Set-PSDebug -Trace 1
คำสั่งนี้จะส่งผลให้แสดงทุกบรรทัดของสคริปต์การดำเนินการ:
เมื่อ
Trace
พารามิเตอร์มีค่า 1 แต่ละบรรทัดของสคริปต์จะถูกติดตามขณะที่รัน เมื่อพารามิเตอร์มีค่า 2 การกำหนดตัวแปรการเรียกใช้ฟังก์ชันและการเรียกใช้สคริปต์จะถูกติดตามด้วย หากระบุพารามิเตอร์ Step คุณจะได้รับพร้อมท์ก่อนที่สคริปต์แต่ละบรรทัดจะทำงาน