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, в котором отображается состояние выполняемой команды или скрипта. Можно выбрать параметры, которые отражает индикатор, а также текст, который отображается сверху и снизу от индикатора выполнения.

Примеры

Пример 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

for($I = 1; $I -lt 101; $I++ )
{
    Write-Progress -Activity Updating -Status 'Progress->' -PercentComplete $I -CurrentOperation OuterLoop
    for($j = 1; $j -lt 101; $j++ )
    {
        Write-Progress -Id 1 -Activity Updating -Status 'Progress' -PercentComplete $j -CurrentOperation InnerLoop
    }
}

Updating
Progress ->
 [ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]
OuterLoop
Updating
Progress
 [oooooooooooooooooo                                                   ]
InnerLoop

В этом примере показан ход выполнения двух вложенных циклов 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 a 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
    # 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 ($i/$Events.count*100)
} -End {
    # Display the matching messages using the out variable.
    $out
}

Эта команда отображает ход выполнения команды для поиска строки "bios" в журнале системных событий.

Значение параметра PercentComplete вычисляется путем деления количества событий, обработанных $I на общее количество полученных $Events.count событий, а затем умножая результат на 100.

Пример 4. Отображение хода выполнения для каждого уровня вложенного процесса

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 -m 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

Write-Progress не создает выходные данные.

Примечания

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

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