如何在运行时保持 PowerShell 进程打开并进行输入/输出?

如何在运行时保持 PowerShell 进程打开并进行输入/输出?

我最近在研究如何保持 powershell 进程处于活动状态,以便我可以运行 PS 代码而无需每次都打开一个新进程。

需求: - 动态运行多个 PS 脚本,以便它们具有相同的基本(自定义)模块,尽可能高效。

能够在这些脚本进程仍在运行时与其 stdout/stdin/stderr 进行通信。

理想情况下,我希望一个进程用docker打开,导入我的模块,然后收集代码本身来运行,在与已经打开的进程相同的进程中运行它,这样它就不必打开另一个进程也不必再次导入我的模块。

问题:- 在 docker 容器中设置 PS 进程需要花费大量时间。(大约 2.5 秒,在我开始运行任何代码之前,我仅谈论的是 PS 进程)

到目前为止,我还没有找到一种在无需创建新进程和再次导入模块的情况下在同一进程上运行动态代码的 PS 方法。我也没有找到在新进程仍在运行时与其动态通信的方法。可能的解决方案:- 使用 -noprofile 创建初始 PS 进程,这样它就不会加载得太慢。(我还没有测试这个,但 redit 上的人们似乎赞同这种方法)- 使用带有 -NoNewWindow 标志的 start-process,因此它每次都会生成新进程,但我猜初始设置时间会节省。- 尝试在大块代码上使用 Invoke-Expression,但据我所知,这并不推荐,并且可能不会让它在完成之前与在那里运行的代码进行主动通信。

启动进程-NoNewWindow 和

Invoke-Expression 是我迄今为止能找到的唯一相关机制。

有人告诉我 AWS lambda 具有与我试图实现的功能类似的功能,但查看它的代码时我没有取得太大进展,我想也许值得向比我聪明的人寻求帮助 :) 任何帮助都将不胜感激。我并不寻求已经完全正常工作的 3ed 端解决方案,只需能够在 PS 代码中模仿该行为就足够了。

相关内容