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 では、ANSI エスケープ シーケンスを $PSStyle 使用して PowerShell で特定の情報を表示する方法を制御するために使用される自動変数が追加されました。 この $PSStyle.Progress メンバーを使用すると、進行状況ビュー バーのレンダリングを制御できます。

  • $PSStyle.Progress.Style - 表示スタイルを設定する ANSI 文字列。
  • $PSStyle.Progress.MaxWidth - ビューの最大幅を設定します。 既定値は 120 です。 最小値は 18 です。
  • $PSStyle.Progress.View - 値 MinimalClassic を持つ列挙型。 Classic は変更なしの既存の表示です。 Minimal は単一行の最小表示です。 Minimal は既定値です。

詳細については $PSStyle、「about_ANSI_Terminals.md」を参照 してください

Note

ホストで仮想ターミナルがサポートされていない場合、$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
}

このコマンドは、1 から 100 までの数のループの for 進行状況を表示します。

コマンドレット 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           = 'Progress'
            PercentComplete  = $j
            CurrentOperation = 'InnerLoop'
        }
        Write-Progress @InnerLoopProgressParameters
        Start-Sleep -Milliseconds 25
    }
}

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

次の使用例は、進行状況ビューを Classic 設定し、それぞれ進行状況バーで表される 2 つの入れ子になった for ループの進行状況を表示します。

Write-Progress 2 番目の進行状況バーのコマンドには、最初の進行状況バーと区別する 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
}

このコマンドは、System イベント ログ内で "bios" という文字列を検索するコマンドの進行状況を表示します。

PercentComplete パラメーター値は、処理されたイベントの数を取得$Events.countした$iイベントの合計数で割り、その結果を 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

ステータス バーの上の見出しのテキストの 1 行目を指定します。 このテキストは、進行状況が表示されているアクティビティについて説明します。

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

それぞれの進行状況バーを区別するための ID を指定します。 1 つのコマンドで複数の進行状況バーを作成する場合は、このパラメーターを使用します。 進行状況バーに異なる 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

レコードのソースを指定します。 これは ID の代わりに使用できますが、ParentId などの他のパラメーターでは使用できません。

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

-Status

ステータス バーの上の見出しのテキストの 2 行目を指定します。 このテキストは、アクティビティの現在の状態を記述します。

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 クラス」を参照してください