如何在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" } }
输出
广告