Поиск по сайту:

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.