Write-Progress
在 Windows PowerShell 命令視窗中顯示進度列。
語法
Write-Progress [-Activity] <string> [-Status] <string> [[-Id] <int>] [-Completed] [-CurrentOperation <string>] [-ParentId <int>] [-PercentComplete <int>] [-SecondsRemaining <int>] [-SourceId <int>] [<CommonParameters>]
描述
Write-Progress Cmdlet 會在 Windows PowerShell 命令視窗中顯示進度列,它是用來描述執行中的命令或指令碼的狀態。您可以選取進度列反射的指示器,以及出現在進度列上方或下方的文字。
參數
-Activity <string>
指定狀態列上方的標題第一行文字。此文字描述正在被報告進度的活動。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Completed
指出能否看見進度列。如果省略這個參數,Write-Progress 就會顯示進度資訊。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-CurrentOperation <string>
指定進度列下方的文字行。此文字描述目前正在進行的作業。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Id <int>
指定可區別每個進度列的識別碼。當您以單一命令建立一個以上的進度列時,請使用此參數。如果進度列之間沒有不同的識別碼,它們會相互覆蓋,而不是以序列顯示。
必要? |
false |
位置? |
3 |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-ParentId <int>
識別目前活動的父活動。值為 -1 表示目前的活動沒有父活動。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-PercentComplete <int>
指定活動已完成百分比。值為 -1 表示已完成百分比未知或不適用。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-SecondsRemaining <int>
指定截至活動完成預計剩餘的秒數。值為 -1 表示剩餘秒數未知或不適用。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-SourceId <int>
識別記錄的來源。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Status <string>
指定狀態列上方的標題第二行文字。此文字描述活動的目前狀態。
必要? |
true |
位置? |
2 |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
無 您無法經由管道將輸入輸出至這個 Cmdlet。 |
輸出 |
無 Write-Progress 不會產生任何輸出。 |
附註
如果進度列沒有出現,請檢查 $ProgressPreference 變數的值。如果這個值是設為 SilentlyContinue,就不會顯示進度列。如需 Windows PowerShell 喜好設定的詳細資訊,請參閱 about_Preference_Variables。
此 Cmdlet 的參數會對應至 ProgressRecord 類別 (System.Management.Automation.ProgressRecord) 的屬性。如需詳細資訊,請參閱 Windows PowerShell 軟體開發套件 (SDK) 中的 ProgressRecord 主題。
範例 1
C:\PS>for ($i = 1; $i -lt 101; $i++ )
{for ($j=0;$j -lt 10000;$j++) {} write-progress -activity "Search in Progress" -status "% Complete:" -percentcomplete $i;}
描述
-----------
這個命令會顯示兩個巢狀 For 迴圈的進度。第一個迴圈會計數到 100。針對該迴圈的每一個增量,第二個迴圈會計數到 10,000。
Write-Progress 命令包含狀態列標題 ("activity")、狀態行和變數 $i (For 迴圈中的計數器),而這個變數表示工作的相對完成度。
範例 2
C:\PS>for($i = 1; $i -lt 101; $i++ ) {write-progress -activity Updating -status progress-> -percentcomplete $i -currentOperation OuterLoop} for($i = 1; $i -lt 101; $i++ ) {write-progress -activity Updating -status progress -percentcomplete $i -id 1 -currentOperation InnerLoop}
Updating
progress ->
[oooooooooooooooooo ]
OutsideLoop
Updating
progress
[oooooooooooooooooo ]
InnerLoop
描述
-----------
這個範例會顯示兩個巢狀 For 迴圈的進度,而每個 For 迴圈都以一個進度列代表。
第二個進度列的 Write-Progress 命令包含 Id 參數,以便區別於第一個進度列。如果沒有 Id 參數,進度列會互相覆蓋,而不是一上一下顯示。
範例 3
C:\PS>$events = get-eventlog -logname system
C:\PS> $events | foreach-object -begin {clear-host;$i=0;$out=""} `
-process {if($_.message -like "*bios*") {$out=$out + $_.Message};
$i = $i+1;`
write-progress -activity "Searching Events" `
-status "Progress:" -percentcomplete ($i/$events.count*100)} `
-end {$out}
描述
-----------
這個命令會為要尋找系統事件記錄檔中 "bios" 字串的命令顯示進度。
這個命令的第一行,Get-EventLog Cmdlet 會取得系統記錄檔的事件,然後將這些事件儲存到 $events 變數。
在第二行中,這些事件會經由管道輸出至 ForEach-Object Cmdlet。在開始處理之前,Clear-Host Cmdlet 會用來清除螢幕、將計數器變數 $i 設為零,並將 $out 輸出變數設為空白字串。
第三行,即 ForEach-Object Cmdlet 的 Process 指令碼區塊,此 Cmdlet 會搜尋每個傳入的物件的 message 屬性以找出 "bios"。如果找到該字串,就會在 $out 中加入訊息。
第四行,計數器變數 $i 會增加 1 以記錄「又檢查了一個事件」。
第五行,使用 Write-Progress Cmdlet 搭配 Activity 和 Status 文字欄位的值,這兩個欄位會分別建立進度列標題的第一行和第二行。PercentComplete 參數值的計算方式是將已處理的事件數 ($i) 除以擷取的事件總數 ($events.count),再將該結果乘以 100。
最後一行,ForEach-Object Cmdlet 的 End 參數是用來顯示 $out 變數中儲存的訊息。
請參閱
概念
Write-Verbose
Write-Error
Write-Host
Write-Debug
Write-Output
Write-Warning