Поделиться через


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.