我正在开发自定义 powershell 状态线,并实现了一些很酷的功能:电池监控、wifi 监控等。不幸的是,这些更新往往很慢,因为它们需要调用 Get-NetAdapterStatistics、获取 wmi 对象和其他非常缓慢的通话。我正在尝试通过 start-job 生成子进程以允许后台轮询和更新共享变量,但无法弄清楚如何执行此操作。我找到的最好的替代品是一种 IPC(如此处所述:两个单独的 Powershell 进程之间的管道传输),但如果可能的话,我更愿意坚持使用传统的共享变量。有没有办法做到这一点?我发现的最佳替代方法是将变量作为参数传递,但这不允许进行轮询。
免责声明,我知道这并不是 powershell 的真正设计目的,但我仍然想知道这是否可能。或者是编写将返回状态行的 ac/c++ 二进制文件的最佳选择?写入文件(这看起来可能很慢)?如果可以,或者如果您需要更多信息,请告诉我什么可能有效。谢谢你。
更多信息:
Start-Job -Name testJob -Script {
$testVar = "asdf"
}
Write-Host $testVar
# should output asdf
有什么办法吗?我正在尝试做一些工作并返回一个变量。这怎么可能?我发现的唯一可能方法是:
写文件到磁盘,有点慢
使用 IPC 管道:
最大的缺点是它有点小故障。最重要的是,当我关闭 powershell 窗口(因为这是一个状态行)时,我不知道如何关闭 IPC 管道,我最终得到一个“管道泄漏”,导致高 cpu 使用率和运行的 powershell 进程的背景。这至少不是直接写入文件的后台作业的情况。显然,当最后一个引用被删除时,管道应该关闭,但后台作业在它打开的情况下继续运行。这是因为 powershell 会话在等待与管道相关的内容(等待管道连接、完成写一行等)时将挂起到无法按 ctrl-c'd 的位置。
谢谢,如果我可以添加更多信息,请告诉我。
更新:我试过基本上使用空文件作为控制标志(我认为这比为每个设置解析一个文件要快),但我正在尝试使用一个作业来返回 VCS 信息(这会更容易返回,并且快点)。关于如何解决这个问题的任何想法?我很难过。
注意:我标记这个 C# 是因为 powershell 使用 C# 的管道函数,我希望有这方面知识的人能够提供帮助。
扬帆大鱼
相关分类