Write-Progress
Отображает индикатор выполнения в окне командной строки 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
переменную, используемую для управления отображением определенных сведений с помощью escape-последовательностей ANSI. Элемент $PSStyle.Progress
позволяет управлять отрисовкой панели представления хода выполнения.
$PSStyle.Progress.Style
— строка ANSI, задающая стиль рендеринга.$PSStyle.Progress.MaxWidth
— задает максимальную ширину представления. По умолчанию —120
. Минимальное значение равно 18.$PSStyle.Progress.View
— перечисление со значениямиMinimal
иClassic
.Classic
— существующий рендеринг без изменений.Minimal
— минимальный рендеринг одной строки. Значение по умолчанию —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. Отображение хода выполнения вложенных циклов Для
$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
В этом примере отображается представление Classic
хода выполнения, а затем отображается ход выполнения двух вложенных for
циклов, каждый из которых представлен индикатором выполнения.
Команда Write-Progress
для второй панели хода выполнения включает параметр Id , который отличает его от первой панели хода выполнения.
Без параметра Id индикатор хода выполнения будет заменен друг на друга, а не отображаться под другим.
Примечание.
В этом примере отображается представление Classic
хода выполнения, в котором отображаются значения CurrentOperation для каждой панели выполнения. Если для представления хода выполнения задано Minimal
значение, значения CurrentOperation не отображаются.
Пример 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 |
Position: | 0 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Completed
Указывает, отображается ли индикатор выполнения. Если этот параметр опущен, Write-Progress
отображает сведения о ходе выполнения.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-CurrentOperation
Задает строку текста под строкой хода выполнения в представлении Classic
хода выполнения. В этом тексте описывается операция, которая выполняется в настоящее время. Этот параметр не влияет, если для представления хода выполнения задано значение Minimal
.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Id
Указывает идентификатор, который позволяет отличить отдельный индикатор выполнения от других индикаторов. Используйте этот параметр при создании нескольких индикаторов выполнения в рамках одной команды. Если индикаторы хода выполнения не имеют разных идентификаторов, они заменяются вместо отображения в серии. Отрицательные значения не допускаются.
Тип: | Int32 |
Position: | 2 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-ParentId
Указывает родительское действие текущего действия. Используйте значение -1
, если текущее действие не имеет родительского действия.
Тип: | Int32 |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-PercentComplete
Указывает процент завершенного действия. Используйте значение -1
, если процент завершения неизвестен или не применим.
Тип: | Int32 |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-SecondsRemaining
Указывает предполагаемое количество секунд, оставшихся до завершения действия. Используйте значение -1
, если количество оставшихся секунд неизвестно или неприменимо.
Тип: | Int32 |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-SourceId
Указывает источник записи. Это можно использовать вместо идентификатора, но не может использоваться с другими параметрами, такими как ParentId.
Тип: | Int32 |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Status
Указывает вторую строку текста в заголовке над индикатором состояния. Этот текст описывает текущее состояние действия.
Тип: | String |
Position: | 1 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
None
Этот командлет не возвращает выходные данные.
Примечания
Если индикатор выполнения не отображается, проверьте значение переменной $ProgressPreference
. Если задано SilentlyContinue
значение, индикатор выполнения не отображается. Дополнительные сведения о параметрах PowerShell см. в about_Preference_Variables.
Параметры командлета соответствуют свойствам класса System.Management.Automation.ProgressRecord . Дополнительные сведения см. в разделе ProgressRecord Class.
Связанные ссылки
PowerShell