使用system.managment.automation的Powershell脚本是否仍会在其C#主机死后运行?

时间:2016-07-25 21:02:35

标签: c# powershell runspace

我想将PowerShell功能添加到C#程序和 我嵌入了system.managment.automation.dll程序集作为参考。 我在StackOverflow上找到了两种从C#调用PowerShell scrit的方法:

  • 使用运行空间:

  • 使用运行空间:

    PowerShell powerShell = PowerShell.Create();
    powerShell.AddScript("my script");
    powerShell.Invoke();
    

根据this website,似乎Powershell实例与其C#主机绑定。

  

Powershell运行时作为运行空间调用,默认情况下会同步处理命令并将处理结果传递给主机应用程序,以便将它们返回给用户。

此外,PowerShell脚本使用嵌入式system.managment.automation.dll程序集而不是系统范围的程序集,因此脚本将在逻辑上停止使用其C#主机。

在用户关闭程序后,Powershell脚本是否仍会运行?这两种方法怎么样?

PS:我想支持PowerShell v2。

1 个答案:

答案 0 :(得分:0)

让我们以反向年表的方式来看待这个:

  

这两种方法怎么样?

没有使用“使用运行空间”来运行powershell代码的事情。

简单的解释是,运行空间是核心先决条件 - 顾名思义,运行空间是空间,其中powershell代码运行

当你这样做时:

PowerShell powerShell = PowerShell.Create()

隐式创建运行空间并将其附加到PowerShell实例。

唯一的区别是你只是将对Runspace创建的控制推迟到System.Management.Automation API,而不是自己实例化。

  

在用户关闭程序后,Powershell脚本是否仍会运行?

在主机应用程序终止后,脚本将继续执行的唯一情况是,当您连接到远程运行空间时,即。托管在另一个进程或另一台计算机上的运行空间。

否则,运行空间(隐式或非隐式)将在退出时与宿主应用程序的其余部分一起处理。