Write-Progress
Отображает индикатор выполнения в окне командной строки PowerShell.
Синтаксис
Default (по умолчанию)
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. Отображение хода выполнения вложенных циклов 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 = '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, который отличает его от первой панели хода выполнения.
Без параметра идентификатора индикаторы хода выполнения будут заменены друг на друга, а не отображаются под другим.
Замечание
В этом примере представление хода выполнения задает значение 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 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | 0 |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Completed
Указывает, отображается ли индикатор выполнения. Если этот параметр опущен, Write-Progress отображает сведения о ходе выполнения.
Свойства параметра
| Тип: | SwitchParameter |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-CurrentOperation
Задает строку текста под строкой хода выполнения в представлении Classic хода выполнения. В этом тексте описывается операция, которая выполняется в настоящее время. Этот параметр не влияет, если для представления хода выполнения задано значение Minimal.
Свойства параметра
| Тип: | String |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Id
Указывает идентификатор, который отличает каждый индикатор выполнения от других. Используйте этот параметр при создании нескольких индикаторов выполнения в одной команде. Если индикаторы хода выполнения не имеют разных идентификаторов, они заменяются вместо отображения в серии. Отрицательные значения не допускаются.
Свойства параметра
| Тип: | Int32 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | 2 |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-ParentId
Указывает родительское действие текущего действия. Используйте значение -1, если текущее действие не имеет родительского действия.
Свойства параметра
| Тип: | Int32 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-PercentComplete
Указывает процент завершенного действия. Используйте значение -1, если процент завершения неизвестен или не применим.
Свойства параметра
| Тип: | Int32 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-SecondsRemaining
Указывает проецированное количество секунд, оставшихся до завершения действия. Используйте значение -1, если оставшееся количество секунд неизвестно или неприменимо.
Свойства параметра
| Тип: | Int32 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-SourceId
Указывает источник записи. Это можно использовать вместо идентификатора, но его нельзя использовать с другими параметрами, такими как ParentId.
Свойства параметра
| Тип: | Int32 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Status
Указывает вторую строку текста в заголовке над строкой состояния. Этот текст описывает текущее состояние действия.
Свойства параметра
| Тип: | String |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | 1 |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
None
Этот командлет не возвращает выходные данные.
Примечания
Если индикатор выполнения не отображается, проверьте значение переменной $ProgressPreference. Если для параметра задано значение SilentlyContinue, индикатор выполнения не отображается. Дополнительные сведения о параметрах PowerShell см. в about_Preference_Variables.
Параметры командлета соответствуют свойствам класса System.Management.Automation.ProgressRecord. Дополнительные сведения см. в классе ProgressRecord.