Vip*_*ppy 6 powershell loops progress
我的研究:
好的,我已经查看了几十个例子Write-Progress并观察了以下内容.大部分时间与循环结合使用,通常是"for"或"foreach".大多数示例不做任何事情,但计数为100.其他更有用的示例将执行某个命令,例如复制文件.没有示例包含整个脚本.
我的设置:
我有几个脚本(数千行代码)在某些时候相互调用.一个脚本控制或调用所有其他脚本.该脚本运行大约15分钟,在此期间我想提供状态使用Write-Progress.
我的问题:
在我的Write-Progress所有脚本执行时如何使用提供状态?基本上我想"包装" Write-Progress我的所有脚本或者是从单个脚本为多个被调用脚本提供状态的最佳方法.
最好的例子:
到目前为止,我见过的最好的用法是Update-Help在PowerShell V3中使用CmdLet.但由于我看不到Update-HelpCmdLet 的源代码,这对我没有帮助.
试试吧.第一个文件是master.p1:
$parentId = 1
$childId = 2
Write-Progress -Id $parentId -Activity "Running master script" -Status "Step 1 of 3" -PercentComplete 0
.\slave.ps1 $parentId $childId
Write-Progress -Id $parentId -Activity "Running master script" -Status "Step 2 of 3" -PercentComplete 33.3
.\slave.ps1 $parentId $childId
Write-Progress -Id $parentId -Activity "Running master script" -Status "Step 3 of 3" -PercentComplete 66.3
.\slave.ps1 $parentId $childId
Run Code Online (Sandbox Code Playgroud)
第二个文件是slave.ps1:
param([int32]$ProgressParentId, [int32]$progressId)
for($i = 0; $i -le 100; $i += 10)
{
    Write-Progress -Id $progressId -ParentId $parentId `
                   -Activity "Running slave script" `
                   -Status "Processing $i" `
                   -CurrentOperation "CurrentOp $i" -PercentComplete $i
    Start-Sleep -Milliseconds 500
}
Run Code Online (Sandbox Code Playgroud)
将这两个文件放在同一个目录中,并从PowerShell(或ISE)执行master.ps1.我之前使用过这种方法来报告跨多个脚本的多个阶段的进度.关键是ParentId将顶级进度传递给子脚本,以便它们可以在同一个上下文中报告进度.如果您Id为每个人提供一个独特的,他们可以获得自己独立的进度条.或者在Id任何地方都可以更新单个进度条.