如何在PowerShell中編寫進度條?
當我們在PowerShell中編寫指令碼時,執行指令碼的使用者希望看到指令碼的進度,而不是在指令碼執行後臺任務時等待空閒並檢視空白游標。一種方法是使用Verbose引數檢視進度,但它不會顯示圖形化進度。要檢視圖形化進度,可以使用PowerShell支援的Write-Progress cmdlet。
Write-Progress cmdlet主要依賴於3個引數。
Activity − 進度條的標題,或者您可以提及正在執行的活動名稱。
Status − 進度條的副標題。這將是活動之後的第二行。
Percentage Completed − 已完成的百分比進度。這應該是整數。
檢視下面只包含activity引數的示例並執行程式碼。
示例
for($i=0;$i -le 100; $i++){
Write-Progress -Activity "Counting from 1 to 100"
sleep 1
}輸出

在上面的輸出中,您可以看到“從1計數到100”是標題,“正在進行”是我們尚未修改的預設狀態。在這裡您可以看到沒有顯示進度,因為我們沒有使用Percentage引數。現在我們將修改同一示例中進度條的狀態。
示例
for($i=0;$i -le 100; $i++){
Write-Progress -Activity "Counting from 1 to 100 " -Status "Counting $i
times"
$i
sleep 1
}輸出

正如您在上面的輸出中看到的,有了新的副標題,但我們仍然沒有看到完成的百分比,為此,您需要使用PercentComplete引數。
$tcount = 100
for($i=0;$i -le $tcount; $i++){
$pcomplete = ($i / $tcount) * 100
Write-Progress -Activity "Counting from 1 to 100" -Status "Counting $i times" -PercentComplete $pcomplete
$i
sleep 1
}當您檢視上面程式碼的輸出時,您將看到進度條正在工作。

現在我們來看另一個示例,這將幫助我們更好地瞭解進度條。在下面的示例中,我們使用了Windows事件命令來檢索每個Windows事件(如系統、應用程式、安全等)的前10個錯誤日誌,並且在檢索過程需要一些時間時,我們將使用進度條來顯示指令碼輸出的增長。
示例
$Winlogs = (Get-Eventlog -List).LogDisplayName
foreach($log in $Winlogs){
try{
$eventlog = Get-EventLog -LogName $log -EntryType Error -ErrorAction Stop| Select -First 10
if($eventlog){
Write-Output "`nLog Name : $log"
for($i=0;$i -le $eventlog.count; $i++){
$perct = ($i / $eventlog.count) * 100
Write-Progress -Activity "Windows Logs Progress" -Status "Displaying Log : $log" - PercentComplete $perct
$eventlog[$i]
Sleep 1
}
}
}
catch [Exception]{
Write-Warning "No logs found for $log"
}
}輸出

廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP