Dela via


Write-Progress

Visar ett förloppsfält i ett PowerShell-kommandofönster.

Syntax

Default (Standard)

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

Description

Cmdleten Write-Progress visar ett förloppsfält i ett PowerShell-kommandofönster som visar statusen för ett kommando eller skript som körs. Du kan välja de indikatorer som fältet reflekterar och den text som visas ovanför och under förloppsindikatorn.

PowerShell 7.2 lade till den $PSStyle automatiska variabeln som används för att styra hur PowerShell visar viss information med hjälp av ANSI-escapesekvenser. Med $PSStyle.Progress-medlemmen kan du styra återgivningen av förloppsvyfältet.

  • $PSStyle.Progress.Style – En ANSI-sträng som anger återgivningsformatet.
  • $PSStyle.Progress.MaxWidth – Sätter maxbredden för vyn. Standardinställningen är 120. Minimivärdet är 18.
  • $PSStyle.Progress.View – en uppräkning med värden, Minimal och Classic. Classic är den befintliga renderingen utan ändringar. Minimal är en enkelradig minimal återgivning. Minimal används som standard.

Mer information om $PSStylefinns i about_ANSI_Terminals.md.

Anmärkning

Om värden inte stöder virtuell terminal ställs $PSStyle.Progress.View automatiskt in på Classic.

Exempel

Exempel 1: Visa förloppet för en for-loop

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

Det här kommandot visar förloppet för en for-loop som räknas från 1 till 100.

Cmdleten Write-Progress innehåller en statusfältrubrik Activity, en statusrad och variabeln $i (räknaren i for-loopen), vilket anger aktivitetens relativa fullständighet.

Exempel 2: Visa förloppet för kapslade for-loopar

$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

I det här exemplet anges förloppsvyn till Classic och visar sedan förloppet för två kapslade for-loopar, som var och en representeras av en förloppsindikator.

Kommandot Write-Progress för den andra förloppsindikatorn innehåller parametern ID som skiljer den från den första förloppsindikatorn.

Utan parametern ID skulle förloppsstaplarna läggas ovanpå varandra i stället för att visas under varandra.

Anmärkning

I det här exemplet anges förloppsvyn till Classic, som visar värdena CurrentOperation för varje förloppsindikator. När förloppsvyn är inställd på Minimalvisas inte värdena CurrentOperation.

Exempel 3: Visa förloppet när du söker efter en sträng

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

Det här kommandot visar förloppet för ett kommando för att hitta strängen "bios" i systemhändelseloggen.

Parametervärdet PercentComplete beräknas genom att dividera antalet händelser som har bearbetats $i med det totala antalet händelser som hämtats $Events.Count och sedan multiplicera resultatet med 100.

Exempel 4: Visa förlopp för varje nivå i en kapslad process

$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

I det här exemplet kan du använda parametern ParentId för att ha indragna utdata för att visa överordnade och underordnade relationer under förloppet för varje steg.

Parametrar

-Activity

Anger den första textraden i rubriken ovanför statusfältet. Den här texten beskriver aktiviteten vars förlopp rapporteras.

Parameteregenskaper

Typ:String
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:0
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Completed

Anger om förloppsindikatorn är synlig. Om den här parametern utelämnas visar Write-Progress förloppsinformation.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-CurrentOperation

Anger textraden under förloppsindikatorn i Classic förloppsvyn. Den här texten beskriver den åtgärd som för närvarande pågår. Den här parametern har ingen effekt när förloppsvyn är inställd på Minimal.

Parameteregenskaper

Typ:String
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Id

Anger ett ID som skiljer varje förloppsindikator från de andra. Använd den här parametern när du skapar mer än ett förloppsfält i ett enda kommando. Om förloppsstaplarna inte har olika ID:n, överlappar de i stället för att visas i en sekvens. Negativa värden tillåts inte.

Parameteregenskaper

Typ:Int32
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:2
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-ParentId

Anger den överordnade aktiviteten för den aktuella aktiviteten. Använd värdet -1 om den aktuella aktiviteten inte har någon överordnad aktivitet.

Parameteregenskaper

Typ:Int32
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-PercentComplete

Anger procentandelen av aktiviteten som har slutförts. Använd värdet -1 om procent färdigställande är okänt eller inte tillämpligt.

Parameteregenskaper

Typ:Int32
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-SecondsRemaining

Anger det beräknade antalet sekunder som återstår tills aktiviteten har slutförts. Använd värdet -1 om antalet sekunder som återstår är okänt eller inte tillämpligt.

Parameteregenskaper

Typ:Int32
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-SourceId

Anger källan till posten. Du kan använda detta i stället för ID men kan inte användas med andra parametrar som ParentId.

Parameteregenskaper

Typ:Int32
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Status

Anger den andra textraden i rubriken ovanför statusfältet. Den här texten beskriver aktivitetens aktuella tillstånd.

Parameteregenskaper

Typ:String
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:1
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

CommonParameters

Den här cmdleten stöder vanliga parametrar: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction och -WarningVariable. Mer information finns i about_CommonParameters.

Indata

None

Du kan inte skicka objekt till den här cmdleten.

Utdata

None

Den här cmdleten returnerar inga utdata.

Kommentarer

Om förloppsindikatorn inte visas kontrollerar du värdet för variabeln $ProgressPreference. Om värdet är inställt på SilentlyContinuevisas inte förloppsindikatorn. Mer information om PowerShell-inställningar finns i about_Preference_Variables.

Parametrarna för cmdleten motsvarar egenskaperna för klassen System.Management.Automation.ProgressRecord. Mer information finns i ProgressRecord Class.