7

我的研究:

好的,我已经查看了数十个示例Write-Progress并观察了以下内容。大多数时候与循环结合使用,通常是“for”或“foreach”。大多数示例除了数到 100 之外什么都不做。其他更有用的示例将执行某个命令,例如复制文件。没有示例包含整个脚本。

我的设置:

我有几个脚本(数千行代码)在特定时间相互调用。一个脚本控制或调用所有其他脚本。该脚本运行大约 15 分钟,在此期间我想使用Write-Progress.

我的问题:

Write-Progress当我的所有脚本正在执行时,我如何使用它来提供状态?基本上,我想“包装”Write-Progress我所有的脚本,或者任何从单个脚本中为多个被调用脚本提供状态的最佳方法。

最好的例子:

到目前为止,我看到的最佳用途是Update-Help在 PowerShell V3 中使用 CmdLet。但是因为我看不到Update-HelpCmdLet 的源代码,所以这对我没有帮助。

4

1 回答 1

7

试试这个。第一个文件是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
}

Put those two files in the same dir and from PowerShell (or ISE) execute master.ps1. I have used this approach before to report progress of multiple phases across multiple scripts. The key is to pass the ParentId of the top level progress to the child scripts so they can report progress in that same context. If you provide a unique Id for each, they can get their own separate progress bar. Or just the same Id everywhere to update a single progress bar.

于 2012-08-31T22:57:34.110 回答