如何在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