Write-Progress (Microsoft.PowerShell.Utility)
Write-Progress
- Модуль:
- Microsoft.PowerShell.Utility
Отображает индикатор выполнения в командном окне PowerShell.
Синтаксис
Write-Progress
[[-Activity] <String>]
[[-Status] <String>]
[[-Id] <Int32>]
[-PercentComplete <Int32>]
[-SecondsRemaining <Int32>]
[-CurrentOperation <String>]
[-ParentId <Int32>]
[-Completed]
[-SourceId <Int32>]
[<CommonParameters>]Описание
Командлет Write-Progress отображает индикатор выполнения в командном окне PowerShell, который отображает состояние выполняемой команды или сценария. Вы можете выбрать индикаторы, отображаемые на индикаторе, и текст, который будет отображаться над и под индикатором выполнения.
В PowerShell 7.2 добавлена автоматическая переменная $PSStyle, которая используется для управления тем, как PowerShell отображает определенную информацию с помощью escape-последовательностей ANSI. Элемент $PSStyle.Progress позволяет вам управлять отрисовкой индикатора выполнения.
$PSStyle.Progress.Style— строка ANSI, задающая стиль рендеринга.$PSStyle.Progress.MaxWidth— устанавливает максимальную ширину представления. По умолчанию120. Минимальное значение — 18.$PSStyle.Progress.View— перечисление со значениямиMinimalиClassic.Классический— существующий рендеринг без изменений.Minimal— это минимальный рендеринг в одну строку.Минимальный— значение по умолчанию.
Дополнительную информацию о $PSStyle см. в about_ANSI_Terminals.md.
Примечание
Если хост не поддерживает виртуальный терминал, для $PSStyle.Progress.View автоматически устанавливается значение Classic.
Примеры
Пример 1. Отображение хода выполнения цикла For.
for ($i = 1; $i -le 100; $i++ ) {
Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i
Start-Sleep -Milliseconds 250
}Эта команда отображает ход выполнения цикла for, считая от 1 до 100.
Командлет Write-Progress включает заголовок строки состояния Activity, строку состояния и переменную $i (счетчик в for), что указывает на относительную завершенность задачи.
Пример 2. Отображение хода выполнения вложенных циклов 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 = 'Progress'
PercentComplete = $j
CurrentOperation = 'InnerLoop'
}
Write-Progress @InnerLoopProgressParameters
Start-Sleep -Milliseconds 25
}
}
Updating
Progress ->
[ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]
OuterLoop
Updating
Progress
[oooooooooooooooooo ]
InnerLoopВ этом примере для представления хода выполнения устанавливается значение Classic, а затем отображается ход выполнения двух вложенных циклов for, каждый из которых представлен индикатором выполнения.
Команда Write-Progress для второго индикатора выполнения включает параметр Id, который отличает ее от первого индикатора выполнения.
Без параметра Id индикаторы выполнения будут накладываться друг на друга, а не отображаться один под другим.
Пример 3. Отображение прогресса при поиске строки
# 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
}Эта команда отображает ход выполнения команды по поиску строки «bios» в журнале системных событий.
Значение параметра PercentComplete рассчитывается путем деления количества обработанных событий $i на общее количество полученных событий $Events.count а затем умножить этот результат на 100.
Пример 4. Отображение прогресса для каждого уровня вложенного процесса
$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В этом примере вы можете использовать параметр ParentId для вывода с отступом, чтобы отображать отношения родитель-потомок в ходе каждого шага.
Параметры
-Activity
Указывает первую строку текста в заголовке над строкой состояния. Этот текст описывает действие, о ходе которого сообщается.
- Тип :
String
- Позиция:
0
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-Completed
Указывает, виден ли индикатор выполнения. Если этот параметр опущен, Write-Progress отображает информацию о ходе выполнения.
- Тип :
SwitchParameter
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-CurrentOperation
Указывает строку текста под индикатором выполнения. Этот текст описывает операцию, которая происходит в данный момент.
- Тип :
String
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-Id
Указывает идентификатор, который отличает каждый индикатор выполнения от других. Используйте этот параметр, если вы создаете более одного индикатора выполнения в одной команде. Если индикаторы выполнения не имеют разных идентификаторов, они накладываются друг на друга, а не отображаются последовательно. Отрицательные значения не допускаются.
- Тип :
Int32
- Позиция:
2
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-ParentId
Указывает родительское действие текущего действия. Используйте значение -1, если текущее действие не имеет родительского действия.
- Тип :
Int32
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-PercentComplete
Указывает процент выполненного действия. Используйте значение -1, если процент выполнения неизвестен или неприменим.
- Тип :
Int32
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-SecondsRemaining
Указывает прогнозируемое количество секунд, оставшихся до завершения действия. Используйте значение -1, если оставшееся количество секунд неизвестно или неприменимо.
- Тип :
Int32
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-SourceId
Указывает источник записи. Вы можете использовать его вместо Id, но нельзя использовать с другими параметрами, такими как ParentId.
- Тип :
Int32
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-Status
Указывает вторую строку текста в заголовке над строкой состояния. Этот текст описывает текущее состояние деятельности.
- Тип :
String
- Позиция:
1
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
Входы
Нет
Вы не можете передавать объекты в этот командлет.
Выходы
Нет
Этот командлет не возвращает никаких результатов.
Примечания
Если индикатор выполнения не отображается, проверьте значение переменной $ProgressPreference. Если установлено значение SillyContinue, индикатор выполнения не отображается. Дополнительные сведения о настройках PowerShell см. в разделе about_Preference_Variables.
Параметры командлета соответствуют свойствам класса System.Management.Automation.ProgressRecord. Дополнительные сведения см. в разделе Класс ProgressRecord.