我想将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。
答案 0 :(得分:0)
让我们以反向年表的方式来看待这个:
这两种方法怎么样?
没有使用“不使用运行空间”来运行powershell代码的事情。
简单的解释是,运行空间是核心先决条件 - 顾名思义,运行空间是空间,其中powershell代码运行。
当你这样做时:
PowerShell powerShell = PowerShell.Create()
隐式创建运行空间并将其附加到PowerShell实例。
唯一的区别是你只是将对Runspace创建的控制推迟到System.Management.Automation API,而不是自己实例化。
在用户关闭程序后,Powershell脚本是否仍会运行?
在主机应用程序终止后,脚本将继续执行的唯一情况是,当您连接到远程运行空间时,即。托管在另一个进程或另一台计算机上的运行空间。
否则,运行空间(隐式或非隐式)将在退出时与宿主应用程序的其余部分一起处理。