【问题标题】:PowerShell: Write-Progress for Progress on Multiple ScriptsPowerShell:多个脚本进度的写入进度
【发布时间】:2012-08-31 22:12:39
【问题描述】:

我的研究:

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

我的设置:

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

我的问题:

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

最佳示例:

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

【问题讨论】:

    标签: loops powershell progress


    【解决方案1】:

    试试这个。第一个文件是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 来更新单个进度条。

    【讨论】:

    • 基思,感谢您的回答。这看起来很有希望。今天是劳动节周末,所以我会在周四早上试一试。
    • Keith,您的脚本可以单独运行,但我不确定如何将其与我的脚本合并。我尝试在整个脚本中放置多个Write-Progress。唯一的问题是它不会停留/停留在顶部,只是随着我的脚本的详细输出滚动。
    • 最终我使用了一个与您在这里所拥有的非常相似的概念来启动它并开始工作。谢谢。
    • Write-Progress 适用于 Powershell Remoting,而不是交互式会话?
    猜你喜欢
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多