我在嵌入式PowerShell控制台中搜索我的项目C#(从工具箱中添加)。 我找到了一些简单的示例来执行命令并具有返回值(PowerShell。Create(),AddScript,AddCommand,Invoke,...)这很简单,但它不允许inoput用户。 更重要的是,不保留上下文,并且每次运行时都会创建一个新的控制台(丢失的根路径)。
我也找到了一个示例PoshConsole,但它是一个完整的迷宫系统,它是用xaml - techno制作的,我根本不掌握(显然与Form经典不兼容 - 也许我犯了错误?)< / p>
我们在这里,我希望已经清楚了 - 抱歉,我是法国人 事先谢谢你。
答案 0 :(得分:1)
从C#执行Powershell被称为托管PS。当您托管PS,并希望拥有PS和用户都直接交互的某种UI时,您需要实现“PSHost”(谷歌“Powershell主机”)。作为PSHost设计师,您需要决定使用哪种输入/输出技术。常见示例包括:GUI和控制台样式的UI。
实施PSHost然后,在托管环境中运行的脚本可以访问cmdlet,如:write-host
和read-host
。
实现PSHost的另一种方法是在C#程序中执行所有UI输入/输出,并将PS用作脚本/执行引擎。
就保留上下文而言,每次实例化System.management.automation.powershell
(通过Create()
)都会得到一个新的PS环境。要获得新环境,请不要创建新的Powershell。
如果您的主机程序设计必须创建新的Powershell但仍希望保留上下文,则必须以编程方式保存/恢复上下文。您可以编写从C#调用的脚本来执行每项任务。保存脚本将是您在销毁它之前在Powershell中执行的最后一项操作,恢复脚本将是您在新的Powershell中执行的第一件事。