我试图在我的应用程序中添加一些相当有限的 PowerShell 支持:我希望能够定期运行用户定义的 PowerShell 脚本并显示任何输出,并且(最终)能够处理进度通知和用户提示请求。我不需要命令行样式的交互支持,或者(我认为)远程访问或运行多个同时脚本的能力,除非用户脚本在我托管的 shell 中自行完成。我最终希望异步运行脚本或在后台线程上运行脚本,并且可能使用一些初始变量和可能的 cmdlet 为 shell 播种,但这与此功能可能获得的一样“花哨”。
我一直在阅读有关编写主机应用程序代码的 MSDN 文档,但是虽然它愉快地解释了如何创建PowerShell
对象,或Runspace
,或RunspacePool
,或Pipeline
,但没有任何迹象表明为什么人们会选择这些方法中的任何一种而不是另一种。
我想我只能选择这两种方法中的一种,但我喜欢一些关于哪种方法更好的反馈:
PowerShell shell = PowerShell.Create();
shell.AddCommand(/* set initial state here? */);
shell.AddStatement();
shell.AddScript(myScript);
shell.Invoke(/* can set host! */);
或者:
Runspace runspace = RunspaceFactory.CreateRunspace(/* can set host and initial state! */);
PowerShell shell = PowerShell.Create();
shell.Runspace = runspace;
shell.AddScript(myScript);
shell.Invoke(/* can set host here, too! */);
(必需的PSHost
派生类方法之一是EnterNestedPrompt()
,我不知道我运行的用户定义脚本是否会导致它被调用。如果可以,那么我将负责“启动一个新的嵌套输入循环”(根据这里)......如果这会影响上面采取的路径,那也很高兴知道。)
谢谢!