我相信不少人会遇到这类情况,通常在执行一些大批量操作时,代码正在后台持续执行,你又没有为每个细节设置详尽的输出的话,你也不知道到底是脚本卡死了还是正在运行,因为没有任何响应反馈。
应对这种情况,要是我们给脚本创建一个进度条就可以避免以上这些可能产生的问题,如果你有留意过PowerShell更新帮助文档时的状态就会发现在下载更新文档时PowerShell会自动出现一个进度条。
为PowerShell创建进度条使用Write-Progress
命令就可以很方便的做到,先来看下使用方法(因为代码比较长,我这里使用了换行符做了代码截断换行)。
for ($p=1; $p -lt 100; $p++) { Write-Progress -Activity "Starting..."` -PercentComplete $p` -CurrentOperation "$p% Finished"` -Status "Loding..." Start-Sleep 1 }
这个例子很简单的写了一个循环,从1开始一直循环到100,为了让效果明显,这里使用了Start-Sleep
命令目的是为了在每次循环的时候停顿1秒钟,运行代码后就可以看到在PowerShell控制台里会显示一个以符号形式画出来的动态进度条状态。
这里我们用到了Write-Progress
命令的几个参数和说明分别如下:
我们常见的进度条状态除了慢慢累积百分比直到变成100%完成目标外,还有一种是以倒计时形式存在的。为了展现倒计时形式的样子我们需要修改下我们之前的代码,把数值累加循环改成循环递减。
for ($p=100; $p -ge 0; $p--) { Write-Progress -Activity "Starting..."` -SecondsRemaining $p` -CurrentOperation "$p% Not Finished"` -Status "Loding..." Start-Sleep 1 }
让我们来看看运行后的样子。画面还是比较直观的可以让用户知道还剩余多少时间任务就可以完成了。
说实话,我个人还是挺喜欢在一些批量或者遍历操作的脚本中使用Write-Progress
来创建进度条,毕竟无论是你本人还是别人再运行你写的脚本时,随着信息的不断输出同时屏幕上方附带有进度条信息提示,这带给使用者的感受也是不一样的。