如何确定Powershell运行空间生成的进程?

时间:2017-07-07 22:50:11

标签: c# powershell process runspace

我有一个允许定义和安排任务链的应用程序。这些任务是预定义的c#类,它们与用户定义的配置一起运行(想想WWF或逻辑应用程序,但非常特定于域)。

这些任务并不总是涵盖所有需要完成的任务,因此我已经添加了在c#运行空间中运行自定义PowerShell脚本的能力。在包含任务的边缘情况下,用户可以使用powershell任务来运行他们需要的任何自定义操作。

这很有效,但我遇到了自定义Powershell脚本创建永不关闭的新进程的问题。我使用取消令牌来允许中止脚本,但这只会关闭运行空间而不是它创建的进程。有哪些选项可以确保在退出脚本/运行空间时清除自定义PowerShell脚本可能创建的任何进程?

我能想到的唯一两个选择是:

  • 将脚本写入临时文件,并使用powershell.exe在新的c#进程中运行。跟踪新的进程ID,然后在具有脚本进程的父ID的情况下终止并进行处理。
  • 通过为c#powershell包装器代码动态创建新的EXE,在单独的进程中运行c#运行空间。跟踪新的进程ID,然后在具有脚本进程的父ID的情况下终止并进行处理。

C#和powershell环境之间容易传递信息/对象的感觉笨拙和破坏。我目前正在向PowerShell运行空间注入大量上下文信息,以便在用户定义的脚本中使用。

0 个答案:

没有答案