Udostępnij za pośrednictwem


Write-Progress

Wyświetla pasek postępu w oknie polecenia programu PowerShell.

Składnia

Write-Progress
     [[-Activity] <String>]
     [[-Status] <String>]
     [[-Id] <Int32>]
     [-PercentComplete <Int32>]
     [-SecondsRemaining <Int32>]
     [-CurrentOperation <String>]
     [-ParentId <Int32>]
     [-Completed]
     [-SourceId <Int32>]
     [<CommonParameters>]

Opis

Polecenie Write-Progress cmdlet wyświetla pasek postępu w oknie poleceń programu PowerShell, który przedstawia stan uruchomionego polecenia lub skryptu. Możesz wybrać wskaźniki, odzwierciedlone na pasku oraz tekst wyświetlany powyżej i poniżej paska postępu.

Program PowerShell 7.2 dodał zmienną automatyczną $PSStyle używaną do kontrolowania sposobu wyświetlania pewnych informacji przy użyciu sekwencji ucieczki ANSI. Element $PSStyle.Progress członkowski umożliwia kontrolowanie renderowania paska widoku postępu.

  • $PSStyle.Progress.Style - Ciąg ANSI ustawia styl renderowania.
  • $PSStyle.Progress.MaxWidth - Ustawia maksymalną szerokość widoku. Wartość domyślna to 120. Wartość minimalna to 18.
  • $PSStyle.Progress.View - Wyliczenie z wartościami Minimal i Classic. Classic to istniejące renderowanie bez zmian. Minimal jest renderowaniem minimalnym w jednym wierszu. Wartość domyślna to Minimal.

Aby uzyskać więcej informacji na temat $PSStyleprogramu , zobacz about_ANSI_Terminals.md.

Uwaga

Jeśli host nie obsługuje terminalu wirtualnego, $PSStyle.Progress.View zostanie automatycznie ustawiony na Classicwartość .

Przykłady

Przykład 1. Wyświetlanie postępu pętli For

for ($i = 1; $i -le 100; $i++ ) {
    Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i
    Start-Sleep -Milliseconds 250
}

To polecenie wyświetla postęp for pętli z zakresu od 1 do 100.

Polecenie Write-Progress cmdlet zawiera nagłówek Activitypaska stanu , wiersz stanu i zmienną $i (licznik w for pętli), która wskazuje względną kompletność zadania.

Przykład 2. Wyświetlanie postępu zagnieżdżonych pętli 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

W tym przykładzie ustawia widok postępu na Classic , a następnie wyświetla postęp dwóch zagnieżdżonych for pętli, z których każdy jest reprezentowany przez pasek postępu.

Polecenie Write-Progress drugiego paska postępu zawiera parametr Id , który odróżnia go od pierwszego paska postępu.

Bez parametru Id paski postępu byłyby nakładane na siebie zamiast wyświetlać jeden poniżej drugiego.

Uwaga

W tym przykładzie ustawia widok postępu na Classic, który wyświetla wartości CurrentOperation dla każdego paska postępu. Gdy widok postępu jest ustawiony na Minimalwartość , wartości CurrentOperation nie są wyświetlane.

Przykład 3. Wyświetlanie postępu podczas wyszukiwania ciągu

# 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
}

To polecenie wyświetla postęp polecenia w celu znalezienia ciągu "bios" w dzienniku zdarzeń systemu.

Wartość parametru PercentComplete jest obliczana przez podzielenie liczby zdarzeń przetworzonych $i przez łączną liczbę pobranych $Events.count zdarzeń, a następnie pomnożenie tego wyniku przez 100.

Przykład 4. Wyświetlanie postępu dla każdego poziomu zagnieżdżonego 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

W tym przykładzie można użyć parametru ParentId , aby wyświetlić wcięcie danych wyjściowych w celu pokazania relacji nadrzędny-podrzędny w toku każdego kroku.

Parametry

-Activity

Określa pierwszy wiersz tekstu w nagłówku powyżej paska stanu. W tym tekście opisano działanie, którego postęp jest zgłaszany.

Typ:String
Position:0
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Completed

Wskazuje, czy pasek postępu jest widoczny. Jeśli ten parametr zostanie pominięty, Write-Progress wyświetla informacje o postępie.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-CurrentOperation

Określa wiersz tekstu poniżej paska postępu w Classic widoku postępu. W tym tekście opisano operację, która jest obecnie wykonywana. Ten parametr nie ma wpływu, gdy widok postępu jest ustawiony na Minimalwartość .

Typ:String
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Id

Określa identyfikator, który odróżnia każdy pasek postępu od innych. Użyj tego parametru podczas tworzenia więcej niż jednego paska postępu w jednym poleceniu. Jeśli paski postępu nie mają różnych identyfikatorów, są one nakładane zamiast być wyświetlane w serii. Wartości ujemne nie są dozwolone.

Typ:Int32
Position:2
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-ParentId

Określa działanie nadrzędne bieżącego działania. Użyj wartości -1 , jeśli bieżące działanie nie ma działania nadrzędnego.

Typ:Int32
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-PercentComplete

Określa wartość procentową ukończonego działania. Użyj wartości -1 , jeśli wartość procentowa jest nieznana lub nie dotyczy.

Typ:Int32
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-SecondsRemaining

Określa przewidywaną liczbę sekund pozostałych do momentu zakończenia działania. Użyj wartości -1 , jeśli liczba sekund pozostałych jest nieznana lub nie ma zastosowania.

Typ:Int32
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-SourceId

Określa źródło rekordu. Można go użyć zamiast identyfikatora, ale nie można go używać z innymi parametrami, takimi jak ParentId.

Typ:Int32
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Status

Określa drugi wiersz tekstu w nagłówku powyżej paska stanu. W tym tekście opisano bieżący stan działania.

Typ:String
Position:1
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

None

Nie można potokować obiektów do tego polecenia cmdlet.

Dane wyjściowe

None

To polecenie cmdlet nie zwraca żadnych danych wyjściowych.

Uwagi

Jeśli pasek postępu nie jest wyświetlany, sprawdź wartość zmiennej $ProgressPreference . Jeśli wartość jest ustawiona na SilentlyContinue, pasek postępu nie jest wyświetlany. Aby uzyskać więcej informacji na temat preferencji programu PowerShell, zobacz about_Preference_Variables.

Parametry polecenia cmdlet odpowiadają właściwościom klasy System.Management.Automation.ProgressRecord . Aby uzyskać więcej informacji, zobacz ProgressRecord Class (Klasa ProgressRecord).