Write-Progress (Microsoft.PowerShell.Utility)
Write-Progress
- โมดูล :
- Microsoft.PowerShell.Utility
แสดงแถบความคืบหน้าภายในหน้าต่างคำสั่ง PowerShell
ไวยากรณ์
Write-Progress
[[-Activity] <String>]
[[-Status] <String>]
[[-Id] <Int32>]
[-PercentComplete <Int32>]
[-SecondsRemaining <Int32>]
[-CurrentOperation <String>]
[-ParentId <Int32>]
[-Completed]
[-SourceId <Int32>]
[<CommonParameters>]คำอธิบาย
Write-Progress cmdlet จะแสดงแถบความคืบหน้าในหน้าต่างคำสั่ง PowerShell ที่แสดงสถานะของคำสั่งหรือสคริปต์ที่กำลังทำงานอยู่ คุณสามารถเลือกตัวบ่งชี้ที่แถบแสดงและข้อความที่ปรากฏด้านบนและด้านล่างแถบความคืบหน้าได้
PowerShell 7.2 เพิ่มตัวแปรอัตโนมัติ $PSStyle ที่ใช้ในการควบคุมวิธีที่ PowerShell แสดงข้อมูลบางอย่างโดยใช้ลำดับหลีก ANSI สมาชิก $PSStyle.Progress ช่วยให้คุณสามารถควบคุมการแสดงแถบมุมมองความคืบหน้าได้
$PSStyle.Progress.Style- สตริง ANSI ที่ตั้งค่ารูปแบบการแสดงผล$PSStyle.Progress.MaxWidth- ตั้งค่าความกว้างสูงสุดของมุมมอง ค่าเริ่มต้นคือ120ค่าต่ำสุดคือ 18$PSStyle.Progress.View- enum ที่มีค่าMinimalและClassicClassicคือการเรนเดอร์ที่มีอยู่โดยไม่มีการเปลี่ยนแปลงMinimalคือการแสดงผลขั้นต่ำเพียงบรรทัดเดียวMinimalเป็นค่าเริ่มต้น
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ $PSStyle โปรดดู about_ANSI_Terminals.md
บันทึก
หากโฮสต์ไม่รองรับ Virtual Terminal $PSStyle.Progress.View จะถูกตั้งค่าเป็น Classic โดยอัตโนมัติ
ตัวอย่าง
ตัวอย่างที่ 1: แสดงความคืบหน้าของ For loop
for ($i = 1; $i -le 100; $i++ ) {
Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i
Start-Sleep -Milliseconds 250
}คำสั่งนี้แสดงความคืบหน้าของลูป for ที่นับจาก 1 ถึง 100
Write-Progress cmdlet ประกอบด้วยส่วนหัวของแถบสถานะ Activity บรรทัดสถานะ และตัวแปร $i (ตัวนับใน for loop) ซึ่งบ่งบอกถึงความสมบูรณ์ของงาน
ตัวอย่างที่ 2: แสดงความคืบหน้าของ For loops ที่ซ้อนกัน
$PSStyle.Progress.View = 'Classic'
for($I = 0; $I -lt 10; $I++ ) {
$OuterLoopProgressParameters = @{
Activity = 'Updating'
Status = 'Progress->'
PercentComplete = $I * 10
CurrentOperation = 'OuterLoop'
}
Write-Progress @OuterLoopProgressParameters
for($j = 1; $j -lt 101; $j++ ) {
$InnerLoopProgressParameters = @{
ID = 1
Activity = 'Updating'
Status = 'Progress'
PercentComplete = $j
CurrentOperation = 'InnerLoop'
}
Write-Progress @InnerLoopProgressParameters
Start-Sleep -Milliseconds 25
}
}
Updating
Progress ->
[ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]
OuterLoop
Updating
Progress
[oooooooooooooooooo ]
InnerLoopตัวอย่างนี้ตั้งค่ามุมมองความคืบหน้าเป็น คลาสสิก จากนั้นแสดงความคืบหน้าของลูป for ที่ซ้อนกันสองลูป โดยแต่ละลูปแสดงด้วยแถบความคืบหน้า
คำสั่ง Write-Progress สำหรับแถบความคืบหน้าที่สองจะมีพารามิเตอร์ Id ที่ทำให้แตกต่างจากแถบความคืบหน้าแถบแรก
หากไม่มีพารามิเตอร์ Id แถบความคืบหน้าจะซ้อนทับกัน แทนที่จะแสดงไว้ด้านล่างกัน
ตัวอย่างที่ 3: แสดงความคืบหน้าขณะค้นหาสตริง
# Use Get-WinEvent to get the events in the System log and store them in the $Events variable.
$Events = Get-WinEvent -LogName system
# Pipe the events to the ForEach-Object cmdlet.
$Events | ForEach-Object -Begin {
# In the Begin block, use Clear-Host to clear the screen.
Clear-Host
# Set the $i counter variable to zero.
$i = 0
# Set the $out variable to an empty string.
$out = ""
} -Process {
# In the Process script block search the message property of each incoming object for "bios".
if($_.message -like "*bios*")
{
# Append the matching message to the out variable.
$out=$out + $_.Message
}
# Increment the $i counter variable which is used to create the progress bar.
$i = $i+1
# Determine the completion percentage
$Completed = ($i/$Events.count) * 100
# Use Write-Progress to output a progress bar.
# The Activity and Status parameters create the first and second lines of the progress bar
# heading, respectively.
Write-Progress -Activity "Searching Events" -Status "Progress:" -PercentComplete $Completed
} -End {
# Display the matching messages using the out variable.
$out
}คำสั่งนี้แสดงความคืบหน้าของคำสั่งเพื่อค้นหาสตริง "bios" ในบันทึกเหตุการณ์ของระบบ
ค่าพารามิเตอร์ PercentComplete คำนวณโดยการหารจำนวนเหตุการณ์ที่ได้รับการประมวลผล $i ด้วยจำนวนเหตุการณ์ทั้งหมดที่ดึงข้อมูล $Events.count แล้วคูณผลลัพธ์นั้นด้วย 100
ตัวอย่างที่ 4: แสดงความคืบหน้าสำหรับแต่ละระดับของกระบวนการที่ซ้อนกัน
$PSStyle.Progress.View = 'Classic'
foreach ( $i in 1..10 ) {
Write-Progress -Id 0 "Step $i"
foreach ( $j in 1..10 ) {
Write-Progress -Id 1 -ParentId 0 "Step $i - Substep $j"
foreach ( $k in 1..10 ) {
Write-Progress -Id 2 -ParentId 1 "Step $i - Substep $j - iteration $k"
Start-Sleep -Milliseconds 150
}
}
}
Step 1
Processing
Step 1 - Substep 2
Processing
Step 1 - Substep 2 - Iteration 3
Processingในตัวอย่างนี้ คุณสามารถใช้พารามิเตอร์ ParentId เพื่อให้เอาต์พุตเยื้องเพื่อแสดงความสัมพันธ์ระหว่างผู้ปกครองและเด็กในความคืบหน้าของแต่ละขั้นตอน
พารามิเตอร์
-Activity
ระบุบรรทัดแรกของข้อความในส่วนหัวเหนือแถบสถานะ ข้อความนี้อธิบายกิจกรรมที่กำลังรายงานความคืบหน้า
- พิมพ์ :
-
String
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Completed
บ่งชี้ว่ามองเห็นแถบความคืบหน้าหรือไม่ หากละเว้นพารามิเตอร์นี้ Write-Progress จะแสดงข้อมูลความคืบหน้า
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
-
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-CurrentOperation
ระบุบรรทัดข้อความด้านล่างแถบความคืบหน้า ข้อความนี้อธิบายการดำเนินการที่กำลังเกิดขึ้น
- พิมพ์ :
String
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Id
ระบุ ID ที่ทำให้แต่ละแถบความคืบหน้าแตกต่างจากแถบความคืบหน้าอื่นๆ ใช้พารามิเตอร์นี้เมื่อคุณสร้างแถบความคืบหน้ามากกว่าหนึ่งแถบในคำสั่งเดียว หากแถบความคืบหน้าไม่มี ID ที่แตกต่างกัน แถบความคืบหน้าจะซ้อนทับแทนที่จะแสดงเป็นชุด ไม่อนุญาตให้ใช้ค่าลบ
- พิมพ์ :
Int32
- ตำแหน่ง:
2
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-ParentId
ระบุกิจกรรมหลักของกิจกรรมปัจจุบัน ใช้ค่า -1 หากกิจกรรมปัจจุบันไม่มีกิจกรรมหลัก
- พิมพ์ :
Int32
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-PercentComplete
ระบุเปอร์เซ็นต์ของกิจกรรมที่เสร็จสมบูรณ์ ใช้ค่า -1 หากไม่ทราบเปอร์เซ็นต์ที่เสร็จสมบูรณ์หรือไม่เกี่ยวข้อง
- พิมพ์ :
Int32
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-SecondsRemaining
ระบุจำนวนวินาทีที่คาดการณ์ไว้ที่เหลืออยู่จนกว่ากิจกรรมจะเสร็จสิ้น ใช้ค่า -1 หากไม่ทราบจำนวนวินาทีที่เหลือหรือไม่สามารถใช้ได้
- พิมพ์ :
Int32
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-SourceId
ระบุแหล่งที่มาของเรกคอร์ด คุณสามารถใช้สิ่งนี้แทน Id ได้ แต่ไม่สามารถใช้กับพารามิเตอร์อื่นๆ เช่น ParentId
- พิมพ์ :
Int32
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Status
ระบุบรรทัดที่สองของข้อความในส่วนหัวเหนือแถบสถานะ ข้อความนี้อธิบายสถานะปัจจุบันของกิจกรรม
- พิมพ์ :
String
- ตำแหน่ง:
1
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
อินพุต
ไม่มี
คุณไม่สามารถไปป์วัตถุกับ cmdlet นี้
เอาท์พุต
ไม่มี
cmdlet นี้ส่งคืนไม่มีผลลัพธ์
หมายเหตุ
หากแถบความคืบหน้าไม่ปรากฏขึ้น ให้ตรวจสอบค่าของตัวแปร $ProgressPreference หากตั้งค่าเป็น SilentlyContinue แถบความคืบหน้าจะไม่แสดง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า PowerShell โปรดดู about_Preference_Variables
พารามิเตอร์ของ cmdlet สอดคล้องกับคุณสมบัติของคลาส System.Management.Automation.ProgressRecord สำหรับข้อมูลเพิ่มเติม โปรดดูคลาส ProgressRecord