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 エスケープ シーケンスを使用して PowerShell で特定の情報を表示する方法を制御するために使用される、 $PSStyle
自動変数が追加されました。 $PSStyle.Progress
メンバーを使用すると、進行状況ビュー バーのレンダリングを制御できます。
$PSStyle.Progress.Style
- 表示スタイルを設定する ANSI 文字列。$PSStyle.Progress.MaxWidth
- ビューの最大幅を設定します。 既定値は120
です。 最小値は 18 です。$PSStyle.Progress.View
- 値Minimal
とClassic
を持つ列挙型。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 = 'Inner Progress'
PercentComplete = $j
CurrentOperation = 'InnerLoop'
}
Write-Progress @InnerLoopProgressParameters
Start-Sleep -Milliseconds 25
}
}
Updating
Progress ->
[ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]
OuterLoop
Updating
Inner Progress
[oooooooooooooooooo ]
InnerLoop
次の使用例は、進行状況ビューを Classic
に設定し、入れ子になった 2 つの for
ループの進行状況を表示します。それぞれ進行状況バーで表されます。
2 番目の進行状況バーの Write-Progress
コマンドには、最初の進行状況バーと区別する Id パラメーターが含まれています。
Id パラメーターがないと、進行状況バーは互いに重ね合わされ、他方の下に表示されます。
Note
次の使用例は、進行状況ビューを 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
}
このコマンドは、System イベント ログ内で "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
ステータス バーの上の見出しのテキストの 1 行目を指定します。 このテキストは、進行状況が表示されているアクティビティについて説明します。
型: | String |
配置: | 0 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Completed
進行状況バーを表示するかどうかを示します。 このパラメーターを省略すると、 Write-Progress
は進行状況情報を表示します。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-CurrentOperation
Classic
進行状況ビューの進行状況バーの下にあるテキスト行を指定します。 このテキストでは、現在実行されている操作について説明します。 進行状況ビューが Minimal
に設定されている場合、このパラメーターは無効です。
型: | String |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Id
それぞれの進行状況バーを区別するための ID を指定します。 1 つのコマンドで複数の進行状況バーを作成する場合は、このパラメーターを使用します。 進行状況バーに異なる ID がない場合は、系列に表示されるのではなく重ね合わされます。 負の値は使用できません。
型: | Int32 |
配置: | 2 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ParentId
現在のアクティビティの親アクティビティを指定します。 現在のアクティビティに親アクティビティがない場合は、 -1
値を使用します。
型: | Int32 |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-PercentComplete
完了したアクティビティの割合を指定します。 達成率が不明または該当しない場合は、 -1
値を使用します。
型: | Int32 |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SecondsRemaining
アクティビティが完了するまでの推定残り秒数を指定します。 残りの秒数が不明または該当しない場合は、 -1
値を使用します。
型: | Int32 |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SourceId
レコードのソースを指定します。 これは Id の代わりに使用できますがParentId などの他のパラメーターでは使用できません。
型: | Int32 |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Status
ステータス バーの上の見出しのテキストの 2 行目を指定します。 このテキストは、アクティビティの現在の状態を記述します。
型: | String |
配置: | 1 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
None
このコマンドレットにオブジェクトをパイプすることはできません。
出力
None
このコマンドレットは、出力を返しません。
メモ
進行状況バーが表示されない場合は、 $ProgressPreference
変数の値を確認します。 値が SilentlyContinue
に設定されている場合、進行状況バーは表示されません。 PowerShell の基本設定の詳細については、「 about_Preference_Variables」を参照してください。
コマンドレットのパラメーターは、 System.Management.Automation.ProgressRecord クラスのプロパティに対応します。 詳細については、「 ProgressRecord クラスを参照してください。
関連リンク
PowerShell