Sdílet prostřednictvím


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í hodnota 120je . Minimální hodnota je 18.
  • $PSStyle.Progress.View - Výčet s hodnotami Minimal a Classic. 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 $PSStylenástroji about_ANSI_Terminals.md.

Poznámka:

Pokud hostitel nepodporuje virtuální terminál, $PSStyle.Progress.View nastaví se automaticky na Classichodnotu .

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í Activitystavové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.