如何在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" } }
輸出
廣告