Write-Progress
Exibe uma barra de progresso em uma janela de comando do PowerShell.
Sintaxe
Write-Progress
[[-Activity] <String>]
[[-Status] <String>]
[[-Id] <Int32>]
[-PercentComplete <Int32>]
[-SecondsRemaining <Int32>]
[-CurrentOperation <String>]
[-ParentId <Int32>]
[-Completed]
[-SourceId <Int32>]
[<CommonParameters>]
Description
O Write-Progress
cmdlet exibe uma barra de progresso em uma janela de comando do PowerShell que descreve o status de um comando ou script em execução. Você pode selecionar os indicadores que a barra reflete e o texto que aparece acima e abaixo da barra de progresso.
O PowerShell 7.2 adicionou a variável automática usada para controlar como o $PSStyle
PowerShell exibe determinadas informações usando sequências de escape ANSI. O $PSStyle.Progress
membro permite controlar a renderização da barra de visualização de progresso.
$PSStyle.Progress.Style
– uma cadeia de caracteres ANSI que define o estilo de renderização.$PSStyle.Progress.MaxWidth
– define a largura máxima da exibição. Assume o padrão de120
. O valor mínimo é 18.$PSStyle.Progress.View
– uma enumeração com valoresMinimal
eClassic
.Classic
é a renderização existente sem alterações.Minimal
é uma renderização mínima de linha única.Minimal
é o padrão.
Para obter mais informações sobre $PSStyle
o , consulte about_ANSI_Terminals.md.
Observação
Se o host não der suporte ao terminal virtual, $PSStyle.Progress.View
será definido automaticamente como Classic
.
Exemplos
Exemplo 1: Exibir o progresso de um loop For
for ($i = 1; $i -le 100; $i++ ) {
Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i
Start-Sleep -Milliseconds 250
}
Este comando exibe o progresso de um for
loop que conta de 1 a 100.
O Write-Progress
cmdlet inclui um título Activity
da barra de status, uma linha de status e a variável $i
(o contador no for
loop), que indica a integridade relativa da tarefa.
Exemplo 2: Exibir o progresso de loops For aninhados
$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
Este exemplo define a exibição de progresso e Classic
exibe o progresso de dois loops aninhados for
, cada um representado por uma barra de progresso.
O Write-Progress
comando para a segunda barra de progresso inclui o parâmetro Id que a distingue da primeira barra de progresso.
Sem o parâmetro Id , as barras de progresso seriam sobrepostas umas às outras em vez de serem exibidas uma abaixo da outra.
Observação
Este exemplo define a exibição de progresso como Classic
, que exibe os valores CurrentOperation Para cada barra de progresso. Quando a exibição de progresso é definida como Minimal
, os valores de CurrentOperation não são exibidos.
Exemplo 3: Exibir o progresso ao pesquisar uma cadeia de caracteres
# 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
}
Este comando exibe o progresso de um comando para encontrar a cadeia de caracteres "bios" no log de eventos do sistema.
O valor do parâmetro PercentComplete é calculado dividindo o número de eventos que foram processados $i
pelo número total de eventos recuperados $Events.count
e, em seguida, multiplicando esse resultado por 100.
Exemplo 4: Exibir o progresso de cada nível de um processo aninhado
$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
Neste exemplo, você pode usar o parâmetro ParentId para ter uma saída recuada para mostrar as relações pai-filho no progresso de cada etapa.
Parâmetros
-Activity
Especifica a primeira linha de texto no título acima da barra de status. Esse texto descreve a atividade cujo progresso está sendo relatado.
Tipo: | String |
Cargo: | 0 |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Completed
Indica se a barra de progresso está visível. Se esse parâmetro for omitido, Write-Progress
exibirá informações de progresso.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-CurrentOperation
Especifica a linha de texto abaixo da barra de progresso no modo de exibição de Classic
progresso. Este texto descreve a operação que está ocorrendo no momento. Esse parâmetro não tem efeito quando a visualização de progresso é definida como Minimal
.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Id
Especifica um identificador que distingue cada barra de progresso das demais. Use este parâmetro quando você estiver criando mais de uma barra de progresso em um único comando. Se as barras de progresso não tiverem IDs diferentes, elas serão sobrepostas em vez de serem exibidas em uma série. Valores negativos não são permitidos.
Tipo: | Int32 |
Cargo: | 2 |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ParentId
Especifica a atividade pai da atividade atual. Use o valor -1
se a atividade atual não tiver atividade pai.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-PercentComplete
Especifica a porcentagem da atividade que é concluída. Use o valor -1
se a porcentagem concluída for desconhecida ou não aplicável.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-SecondsRemaining
Especifica o número previsto de segundos restantes até que a atividade seja concluída. Use o valor -1
se o número de segundos restantes for desconhecido ou não aplicável.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-SourceId
Especifica a origem do registro. Você pode usar isso no lugar de Id , mas não pode ser usado com outros parâmetros, como ParentId.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Status
Especifica a segunda linha de texto no título acima da barra de status. Esse texto descreve o estado atual da atividade.
Tipo: | String |
Cargo: | 1 |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Entradas
None
Você não pode canalizar objetos para esse cmdlet.
Saídas
None
Esse cmdlet não retorna nenhuma saída.
Observações
Se a barra de progresso não aparecer, verifique o valor da $ProgressPreference
variável. Se o valor for definido como SilentlyContinue
, a barra de progresso não será exibida. Para obter mais informações sobre as preferências do PowerShell, consulte about_Preference_Variables.
Os parâmetros do cmdlet correspondem às propriedades da classe System.Management.Automation.ProgressRecord . Para obter mais informações, consulte Classe ProgressRecord.