Write-Progress
Zeigt eine Statusanzeige in einem PowerShell-Befehlsfenster an.
Syntax
Write-Progress
[[-Activity] <String>]
[[-Status] <String>]
[[-Id] <Int32>]
[-PercentComplete <Int32>]
[-SecondsRemaining <Int32>]
[-CurrentOperation <String>]
[-ParentId <Int32>]
[-Completed]
[-SourceId <Int32>]
[<CommonParameters>]
Beschreibung
Das Write-Progress
Cmdlet zeigt eine Statusleiste in einem PowerShell-Befehlsfenster an, das den Status eines ausgeführten Befehls oder Skripts darstellt. Sie können die dargestellten Indikatoren wählen, sowie den Text, der über und unter der Statusanzeige erscheint.
PowerShell 7.2 hat die $PSStyle
automatische Variable hinzugefügt, die verwendet wird, um zu steuern, wie PowerShell bestimmte Informationen mithilfe von ANSI-Escapesequenzen anzeigt. Mit dem $PSStyle.Progress
Element können Sie das Rendern der Statusansichtsleiste steuern.
$PSStyle.Progress.Style
: Eine ANSI-Zeichenfolge, die den Renderingstil festlegt.$PSStyle.Progress.MaxWidth
: Legt die maximale Breite der Ansicht fest. Wird standardmäßig auf120
festgelegt. Der Mindestwert ist 18.$PSStyle.Progress.View
: Eine Enumeration mit den WertenMinimal
undClassic
.Classic
ist das vorhandene Rendering ohne Änderungen.Minimal
ist ein einzeiliges minimales Rendering.Minimal
ist die Standardoption.
Weitere Informationen $PSStyle
finden Sie unter about_ANSI_Terminals.md.
Hinweis
Wenn Host das virtuelle Terminal nicht unterstützt, wird $PSStyle.Progress.View
automatisch auf Classic
festgelegt.
Beispiele
Beispiel 1: Anzeigen des Fortschritts einer For-Schleife
for ($i = 1; $i -le 100; $i++ ) {
Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i
Start-Sleep -Milliseconds 250
}
Dieser Befehl zeigt den Fortschritt einer for
Schleife an, die zwischen 1 und 100 zählt.
Das Write-Progress
Cmdlet enthält eine Statusleistenüberschrift Activity
, eine Statuszeile und die Variable $i
(der Zähler in der for
Schleife), die die relative Vollständigkeit des Vorgangs angibt.
Beispiel 2: Anzeigen des Fortschritts geschachtelter For-Schleifen
$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
In diesem Beispiel wird die Statusansicht festgelegt Classic
und dann der Fortschritt von zwei geschachtelten for
Schleifen angezeigt, die jeweils durch eine Statusleiste dargestellt werden.
Der Write-Progress
Befehl für die zweite Statusleiste enthält den Id-Parameter , der ihn von der ersten Statusleiste unterscheidet.
Ohne den Parameter "Id " würden die Statusanzeigen einander überlagert, anstatt untereinander angezeigt zu werden.
Hinweis
In diesem Beispiel wird die Statusansicht festgelegt Classic
, auf die die CurrentOperation-Werte für jede Statusleiste angezeigt werden. Wenn die Statusansicht auf Minimal
"CurrentOperation" festgelegt ist, werden die CurrentOperation-Werte nicht angezeigt.
Beispiel 3: Anzeigen des Fortschritts beim Suchen nach einer Zeichenfolge
# 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
}
Dieser Befehl zeigt den Status eines Befehls zum Suchen der Zeichenfolge „bios“ im Systemereignisprotokoll an.
Der Wert des PercentComplete-Parameters wird berechnet, indem die Anzahl der Ereignisse dividiert $i
wird, die durch die Gesamtanzahl der abgerufenen $Events.count
Ereignisse verarbeitet und dann mit 100 multipliziert werden.
Beispiel 4: Anzeigen des Fortschritts für jede Ebene eines geschachtelten Prozesses
$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 diesem Beispiel können Sie den Parameter ParentId verwenden, um die Ausgabe eingezogen zu haben, um beziehungen zwischen übergeordneten und untergeordneten Elementen im Fortschritt der einzelnen Schritte anzuzeigen.
Parameter
-Activity
Gibt die erste Textzeile in der Überschrift über der Statusanzeige an. Dieser Text beschreibt die Aktivität, deren Status gemeldet wird.
Typ: | String |
Position: | 0 |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Completed
Gibt an, ob die Statusanzeige sichtbar ist. Wenn dieser Parameter nicht angegeben wird, Write-Progress
werden Statusinformationen angezeigt.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-CurrentOperation
Gibt die Textzeile unterhalb der Statusleiste in der Classic
Statusansicht an. In diesem Text wird der Vorgang beschrieben, der gerade ausgeführt wird. Dieser Parameter hat keine Auswirkung, wenn die Statusansicht auf Minimal
.
Typ: | String |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Id
Gibt eine ID an, die die einzelnen Statusanzeigen voneinander unterscheidet. Verwenden Sie diesen Parameter, wenn Sie in einem einzigen Befehl mehr als eine Statusanzeige erstellen. Wenn die Statusanzeigen keine anderen IDs enthalten, werden sie überlagert, anstatt in einer Reihe angezeigt zu werden. Negative Werte sind nicht zulässig.
Typ: | Int32 |
Position: | 2 |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-ParentId
Gibt die übergeordnete Aktivität der aktuellen Aktivität an. Verwenden Sie den Wert -1
, wenn die aktuelle Aktivität keine übergeordnete Aktivität aufweist.
Typ: | Int32 |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-PercentComplete
Gibt den Prozentsatz der abgeschlossenen Aktivität an. Verwenden Sie den Wert, wenn der Prozentsatz -1
abgeschlossen ist oder nicht zutreffend ist.
Typ: | Int32 |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-SecondsRemaining
Gibt die voraussichtliche Anzahl von Sekunden an, bis die Aktivität abgeschlossen ist. Verwenden Sie den Wert -1
, wenn die verbleibende Anzahl von Sekunden unbekannt oder nicht zutreffend ist.
Typ: | Int32 |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-SourceId
Gibt die Quelle des Datensatzes an. Sie können dies anstelle der ID verwenden, aber nicht mit anderen Parametern wie ParentId verwendet werden.
Typ: | Int32 |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Status
Gibt die zweite Textzeile in der Überschrift über der Statusanzeige an. Dieser Text beschreibt den aktuellen Status der Aktivität.
Typ: | String |
Position: | 1 |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
None
Sie können keine Objekte an dieses Cmdlet weiterleiten.
Ausgaben
None
Dieses Cmdlet gibt keine Ausgabe zurück.
Hinweise
Wenn die Statusanzeige nicht angezeigt wird, überprüfen Sie den Wert der $ProgressPreference
Variablen. Wenn der Wert auf SilentlyContinue
festgelegt ist, wird die Statusanzeige nicht angezeigt. Weitere Informationen zu PowerShell-Einstellungen finden Sie unter about_Preference_Variables.
Die Parameter des Cmdlets entsprechen den Eigenschaften der System.Management.Automation.ProgressRecord-Klasse . Weitere Informationen finden Sie unter ProgressRecord Class.