Write Progress - PowerShell


Write-Progress updates the progress of a long-running operation in the PowerShell console. It provides visual feedback to users, indicating the progress percentage and estimated time remaining. This command is often used in scripts and functions to keep users informed during lengthy processes.


Write-Progress [-Activity] <string> [-Status] <string> [-PercentComplete] <int> [-SecondsRemaining] <int> [-Id] <object> [-SourceArgs] <object>


  • -Activity: Specifies a brief description of the current activity.
  • -Status: Provides additional details about the progress or any potential issues.
  • -PercentComplete: Sets the percentage of completion (0-100).
  • -SecondsRemaining: Displays the estimated time remaining in seconds.
  • -Id: Assigns a unique identifier to the progress bar.
  • -SourceArgs: Passes additional arguments to the progress bar source.


Simple Progress Bar:

$total = 100
for ($i = 1; $i -le $total; $i++) {
    Write-Progress -Activity "Copying files..." -PercentComplete ($i / $total) * 100

Progress Bar with Estimated Time:

$remainingSeconds = 600
$progressPercentage = 0
while ($progressPercentage -lt 100) {
    Write-Progress -Activity "Installing updates..." -PercentComplete $progressPercentage -SecondsRemaining $remainingSeconds
    $progressPercentage += 10
    $remainingSeconds -= 60

Common Issues

Incorrect Percentage Values: Ensure the -PercentComplete value is between 0 and 100.
Negative Time Remaining: The -SecondsRemaining value should be positive.


Pipeline Integration: Write-Progress can be used as the last command in a pipeline to display the progress of the preceding commands.
Scheduled Jobs: This command can be integrated into scheduled jobs to provide progress updates via email or other notifications.

  • Start-Job: Starts a background job and creates a Job object.
  • Get-Job: Retrieves information about a running or completed job, including its progress.
  • Stop-Job: Stops a running job.