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           = '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

Указывает первую строку текста в заголовке над индикатором состояния. Этот текст описывает действие, выполнение которого отражает индикатор.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Completed

Указывает, отображается ли индикатор выполнения. Если этот параметр опущен, Write-Progress отображает сведения о ходе выполнения.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CurrentOperation

Задает строку текста под индикатором выполнения. В этом тексте описывается операция, которая выполняется в настоящее время.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Указывает идентификатор, который позволяет отличить отдельный индикатор выполнения от других индикаторов. Используйте этот параметр при создании нескольких индикаторов выполнения в рамках одной команды. Если индикаторы хода выполнения не имеют разных идентификаторов, они заменяются вместо отображения в серии. Отрицательные значения не допускаются.

Type:Int32
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ParentId

Указывает родительское действие текущего действия. Используйте значение -1 , если текущее действие не имеет родительского действия.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PercentComplete

Указывает процент завершенного действия. Используйте значение -1 , если процент завершения неизвестен или не применим.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SecondsRemaining

Указывает предполагаемое количество секунд, оставшихся до завершения действия. Используйте значение -1 , если количество оставшихся секунд неизвестно или неприменимо.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SourceId

Указывает источник записи. Это можно использовать вместо идентификатора, но не может использоваться с другими параметрами, такими как ParentId.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Status

Указывает вторую строку текста в заголовке над индикатором состояния. Этот текст описывает текущее состояние действия.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

None

Невозможно передать объекты в этот командлет.

Выходные данные

None

Этот командлет не возвращает выходные данные.

Примечания

Если индикатор выполнения не отображается, проверка значение переменной$ProgressPreference. Если задано SilentlyContinueзначение, индикатор выполнения не отображается. Дополнительные сведения о параметрах PowerShell см. в about_Preference_Variables.

Параметры командлета соответствуют свойствам класса System.Management.Automation.ProgressRecord . Дополнительные сведения см. в разделе ProgressRecord Class.