Write-Progress

Geeft een voortgangsbalk weer in een PowerShell-opdrachtvenster.

Syntax

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

Description

De Write-Progress cmdlet geeft een voortgangsbalk weer in een PowerShell-opdrachtvenster met de status van een actieve opdracht of script. U kunt de indicatoren selecteren die door de balk worden weergegeven en de tekst die boven en onder de voortgangsbalk wordt weergegeven.

PowerShell 7.2 heeft de $PSStyle automatische variabele toegevoegd die wordt gebruikt om te bepalen hoe Bepaalde informatie wordt weergegeven met behulp van ANSI-escapereeksen. Met $PSStyle.Progress het lid kunt u de weergavebalkweergave van voortgang beheren.

  • $PSStyle.Progress.Style - Een ANSI-tekenreeks die de renderingstijl instelt.
  • $PSStyle.Progress.MaxWidth - Hiermee stelt u de maximale breedte van de weergave in. Ingesteld op 0 voor consolebreedte. Standaard ingesteld op 120
  • $PSStyle.Progress.View - Een opsomming met waarden Minimal en Classic. Classic is de bestaande rendering zonder wijzigingen. Minimal is een minimale weergave van één regel. Minimal is de standaardwaarde.

Notitie

Als de host geen ondersteuning biedt voor Virtual Terminal, $PSStyle.Progress.View wordt deze automatisch ingesteld op Classic.

Voorbeelden

Voorbeeld 1: De voortgang van een For-lus weergeven

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

Met deze opdracht wordt de voortgang weergegeven van een For-lus die telt van 1 tot 100.

De Write-Progress cmdlet bevat een kop van de statusbalk Activity, een statusregel en de variabele $i (de teller in de For-lus), die de relatieve volledigheid van de taak aangeeft.

Voorbeeld 2: de voortgang van geneste For-lussen weergeven

$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

In dit voorbeeld wordt de voortgangsweergave Classic ingesteld op en wordt vervolgens de voortgang van twee geneste for lussen weergegeven, elk vertegenwoordigd door een voortgangsbalk.

De Write-Progress opdracht voor de tweede voortgangsbalk bevat de id-parameter die deze onderscheidt van de eerste voortgangsbalk.

Zonder de id-parameter worden de voortgangsbalken op elkaar geplaatst in plaats van een onder elkaar weer te geven.

Voorbeeld 3: de voortgang weergeven tijdens het zoeken naar een tekenreeks

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

Met deze opdracht wordt de voortgang van een opdracht weergegeven om de tekenreeks bios te vinden in het gebeurtenislogboek van het systeem.

De parameterwaarde PercentComplete wordt berekend door het aantal gebeurtenissen te delen dat is verwerkt $I door het totale aantal opgehaalde $Events.count gebeurtenissen en dat resultaat vervolgens te vermenigvuldigen met 100.

Voorbeeld 4: Voortgang weergeven voor elk niveau van een geneste proces

$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

In dit voorbeeld kunt u de parameter ParentId gebruiken om ingesprongen uitvoer weer te geven om bovenliggende/onderliggende relaties weer te geven in de voortgang van elke stap.

Parameters

-Activity

Hiermee geeft u de eerste regel tekst in de kop boven de statusbalk. In deze tekst wordt de activiteit beschreven waarvan de voortgang wordt gerapporteerd.

Type:String
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Completed

Geeft aan of de voortgangsbalk zichtbaar is. Als deze parameter wordt weggelaten, Write-Progress wordt voortgangsinformatie weergegeven.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-CurrentOperation

Hiermee geeft u de tekstregel onder de voortgangsbalk. In deze tekst wordt de bewerking beschreven die momenteel plaatsvindt.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Id

Hiermee geeft u een id op die elke voortgangsbalk onderscheidt van de andere. Gebruik deze parameter wanneer u meer dan één voortgangsbalk in één opdracht maakt. Als de voortgangsbalken geen andere id's hebben, worden deze vervangen in plaats van weergegeven in een reeks. Negatieve waarden zijn niet toegestaan.

Type:Int32
Position:2
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-ParentId

Hiermee geeft u de bovenliggende activiteit van de huidige activiteit. Gebruik de waarde -1 als de huidige activiteit geen bovenliggende activiteit heeft.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-PercentComplete

Hiermee geeft u het percentage van de activiteit die is voltooid. Gebruik de waarde -1 als het percentage voltooid onbekend is of niet van toepassing is.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-SecondsRemaining

Hiermee geeft u het verwachte aantal seconden resterende totdat de activiteit is voltooid. Gebruik de waarde -1 als het resterende aantal seconden onbekend is of niet van toepassing is.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-SourceId

Hiermee geeft u de bron van de record. U kunt dit gebruiken in plaats van id , maar kan niet worden gebruikt met andere parameters zoals ParentId.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Status

Hiermee geeft u de tweede regel tekst in de kop boven de statusbalk. In deze tekst wordt de huidige status van de activiteit beschreven.

Type:String
Position:1
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

None

U kunt invoer voor deze cmdlet niet doorsluisen.

Uitvoerwaarden

None

Write-Progress genereert geen uitvoer.

Notities

Als de voortgangsbalk niet wordt weergegeven, controleert u de waarde van de $ProgressPreference variabele. Als de waarde is ingesteld op SilentlyContinue, wordt de voortgangsbalk niet weergegeven. Zie about_Preference_Variables voor meer informatie over PowerShell-voorkeuren.

De parameters van de cmdlet komen overeen met de eigenschappen van de klasse System.Management.Automation.ProgressRecord . Zie ProgressRecord Class voor meer informatie.