gpt4 book ai didi

powershell - 从另一个PowerShell session 监视PowerShell session 中的作业

转载 作者:行者123 更新时间:2023-12-04 07:59:34 25 4
gpt4 key购买 nike

脚本正在循环执行以下步骤,假设两个步骤都需要很长时间才能完成:

  • $x = DoSomeWork;
  • Start-Job -Name "Process $x" { DoSomeMoreWork $x; };

  • 当然,步骤1会阻止脚本,而步骤2则不会。
    我可以通过控制台轻松地监视循环的进度/状态以及第1步。

    我还想做的是监视仍在执行批处理的情况下由步骤2开始的作业的作业状态。

    通常,可以从另一个 session “附加”或查询另一个Powershell session 吗? (假设监视 session 不产生工作程序 session )

    最佳答案

    如果我在关注您,那么您将无法在两个不同的控制台实例之间共享状态。就是说,不可能以您想要的方式来做。但是,不能在同一 session 中监视作业并不是真的。您可以用作业中的事件发出信号:

    Start-Job -Name "bgsignal" -ScriptBlock {

    # forward events named "progress" back to job owner
    # this even works across machines ;-)
    Register-EngineEvent -SourceIdentifier Progress -Forward

    $percent = 0
    while ($percent -lt 100) {
    $percent += 10

    # raise a new progress event, redirecting to $null to prevent
    # it ending up in the job's output stream
    New-Event -SourceIdentifier Progress -MessageData $percent > $null

    # wait 5 seconds
    sleep -Seconds 5
    }
    }

    现在,您可以选择使用 Wait-Event [-SourceIdentifier Progress]Register-EngineEvent -SourceIdentifier Progress [-Action { ... }]或普通的旧交互式 Get-Event来查看和/或根据同一 session (如果您是在远程服务器上启动该作业,则使用另一台计算机)来处理进度。

    如果所有工作都在本地计算机上完成,则完全有可能不需要Jobs基础结构。看看我关于RunspaceFactory和PowerShell对象的老博客文章,了解基本脚本“线程池”实现:

    http://www.nivot.org/2009/01/22/CTP3TheRunspaceFactoryAndPowerShellAccelerators.aspx

    希望这可以帮助,

    -Oisin

    关于powershell - 从另一个PowerShell session 监视PowerShell session 中的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317438/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com