我正在尝试在我的应用程序中添加一些相对有限的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()
,我不知道运行的用户定义脚本是否会调用它。如果可以的话,那么我将负责 "启动一个新的嵌套输入循环"(详见此处)... 如果这会影响以上所述的路径,那也是好事。
谢谢!