我的研究:
好的,我已经查看了几十个Write-Progress
的例子并观察了以下内容。大部分时间与循环结合使用,通常是“for”或“foreach”。大多数示例不做任何事情,但计数为100.其他更有用的示例将执行某个命令,例如复制文件。没有示例包含整个脚本。
我的设置:
我有几个脚本(数千行代码)在特定时间相互调用。一个脚本控制或调用所有其他脚本。该脚本运行大约15分钟,在此期间我想使用Write-Progress
提供状态。
我的问题:
如何在执行所有脚本时使用Write-Progress
提供状态?基本上我想在我的所有脚本周围“包裹”Write-Progress
,或者从单个脚本中为多个被调用脚本提供状态的最佳方法。
最佳示例:
到目前为止,我最常见的用途是在PowerShell V3中使用Update-Help
CmdLet。但由于我无法看到Update-Help
CmdLet的源代码,这对我没有帮助。
答案 0 :(得分:6)
试一试。第一个文件是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
第二个文件是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
}
将这两个文件放在同一个目录中,并从PowerShell(或ISE)执行master.ps1。我之前使用过这种方法来报告跨多个脚本的多个阶段的进度。关键是将顶级进度的ParentId
传递给子脚本,以便他们可以在同一个上下文中报告进度。如果您为每个人提供唯一的Id
,他们可以获得自己独立的进度条。或者只是相同的Id
到处更新单个进度条。