Write-Progress
Zobrazí indikátor průběhu v příkazovém okně PowerShellu.
Syntaxe
Write-Progress
[[-Activity] <String>]
[[-Status] <String>]
[[-Id] <Int32>]
[-PercentComplete <Int32>]
[-SecondsRemaining <Int32>]
[-CurrentOperation <String>]
[-ParentId <Int32>]
[-Completed]
[-SourceId <Int32>]
[<CommonParameters>]
Description
Rutina Write-Progress
zobrazí indikátor průběhu v příkazovém okně PowerShellu, který znázorňuje stav spuštěného příkazu nebo skriptu. Můžete vybrat indikátory, které pruh odráží, a text, který se zobrazí nad a pod indikátorem průběhu.
PowerShell 7.2 přidal automatickou $PSStyle
proměnnou, která se používá k řízení toho, jak PowerShell zobrazuje určité informace pomocí řídicích sekvencí ANSI. Člen $PSStyle.Progress
umožňuje řídit vykreslování pruhů zobrazení průběhu.
$PSStyle.Progress.Style
– Řetězec ANSI, který nastavuje styl vykreslování.$PSStyle.Progress.MaxWidth
- Nastaví maximální šířku zobrazení. Výchozí hodnota120
je . Minimální hodnota je 18.$PSStyle.Progress.View
- Výčet s hodnotamiMinimal
aClassic
.Classic
je stávající vykreslování beze změn.Minimal
je jeden řádek s minimálním vykreslováním.Minimal
je výchozí možnost.
Další informace o $PSStyle
nástroji about_ANSI_Terminals.md.
Poznámka:
Pokud hostitel nepodporuje virtuální terminál, $PSStyle.Progress.View
nastaví se automaticky na Classic
hodnotu .
Příklady
Příklad 1: Zobrazení průběhu smyčky For
for ($i = 1; $i -le 100; $i++ ) {
Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i
Start-Sleep -Milliseconds 250
}
Tento příkaz zobrazí průběh for
smyčky, která počítá od 1 do 100.
Rutina Write-Progress
obsahuje záhlaví Activity
stavového řádku, stavový řádek a proměnnou $i
(čítač ve for
smyčce), která označuje relativní úplnost úlohy.
Příklad 2: Zobrazení průběhu vnořených smyček For
$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 = 'Inner Progress'
PercentComplete = $j
CurrentOperation = 'InnerLoop'
}
Write-Progress @InnerLoopProgressParameters
Start-Sleep -Milliseconds 25
}
}
Updating
Progress ->
[ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]
OuterLoop
Updating
Inner Progress
[oooooooooooooooooo ]
InnerLoop
Tento příklad nastaví zobrazení průběhu a Classic
pak zobrazí průběh dvou vnořených for
smyček, z nichž každý je reprezentovaný indikátorem průběhu.
Příkaz Write-Progress
pro druhý indikátor průběhu obsahuje parametr ID , který ho odlišuje od prvního indikátoru průběhu.
Bez parametru ID se indikátory průběhu překrývají na sebe, místo aby se zobrazovaly pod druhým.
Poznámka:
Tento příklad nastaví zobrazení průběhu na Classic
, který zobrazuje hodnoty CurrentOperation pro každý indikátor průběhu. Pokud je zobrazení průběhu nastavené na Minimal
, hodnoty CurrentOperation se nezobrazí.
Příklad 3: Zobrazení průběhu hledání řetězce
# 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
}
Tento příkaz zobrazí průběh příkazu k vyhledání řetězce bios v protokolu událostí systému.
Hodnota parametru PercentComplete se vypočítá vydělením počtu událostí zpracovaných $i
celkovým počtem načtených $Events.count
událostí a následným vynásobením tohoto výsledku číslem 100.
Příklad 4: Zobrazení průběhu pro každou úroveň vnořeného procesu
$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
V tomto příkladu můžete pomocí parametru ParentId odsazení výstupu zobrazit vztahy nadřazenosti a podřízenosti v průběhu jednotlivých kroků.
Parametry
-Activity
Určuje první řádek textu v záhlaví nad stavovým řádkem. Tento text popisuje aktivitu, jejíž průběh se hlásí.
Typ: | String |
Position: | 0 |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Completed
Určuje, jestli je indikátor průběhu viditelný. Pokud tento parametr vynecháte, Write-Progress
zobrazí se informace o průběhu.
Typ: | SwitchParameter |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-CurrentOperation
Určuje řádek textu pod indikátorem průběhu v Classic
zobrazení průběhu. Tento text popisuje operaci, která se právě provádí. Tento parametr nemá žádný vliv, pokud je zobrazení průběhu nastaveno na Minimal
.
Typ: | String |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Id
Určuje ID, které rozlišuje jednotlivé indikátory průběhu od ostatních. Tento parametr použijte při vytváření více než jednoho indikátoru průběhu v jednom příkazu. Pokud indikátory průběhu nemají jiná ID, jsou místo zobrazení v řadě překryvné. Záporné hodnoty nejsou povolené.
Typ: | Int32 |
Position: | 2 |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-ParentId
Určuje nadřazenou aktivitu aktuální aktivity. Tuto hodnotu -1
použijte, pokud aktuální aktivita nemá žádnou nadřazenou aktivitu.
Typ: | Int32 |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-PercentComplete
Určuje procento dokončené aktivity. Použijte hodnotu -1
, pokud je procento dokončeno neznámé nebo nelze použít.
Typ: | Int32 |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-SecondsRemaining
Určuje předpokládaný počet sekund zbývající do dokončení aktivity. Tuto hodnotu -1
použijte, pokud je počet zbývajících sekund neznámý nebo nelze použít.
Typ: | Int32 |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-SourceId
Určuje zdroj záznamu. Můžete ho použít místo ID , ale nemůžete ho použít s jinými parametry, jako je ParentId.
Typ: | Int32 |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Status
Určuje druhý řádek textu v záhlaví nad stavovým řádkem. Tento text popisuje aktuální stav aktivity.
Typ: | String |
Position: | 1 |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
Vstupy
None
Do této rutiny nemůžete roušit objekty.
Výstupy
None
Tato rutina nevrátí žádný výstup.
Poznámky
Pokud se indikátor průběhu nezobrazí, zkontrolujte hodnotu $ProgressPreference
proměnné. Pokud je hodnota nastavená na SilentlyContinue
, indikátor průběhu se nezobrazí. Další informace o předvolbách PowerShellu najdete v tématu about_Preference_Variables.
Parametry rutiny odpovídají vlastnostem Třídy System.Management.Automation.ProgressRecord . Další informace naleznete v tématu ProgressRecord – třída.