如何在使用类似于其他DLR语言的API的C#应用程序中托管PowerShell 3.0?

8

我一直在使用一个托管IronPython、IronRuby和(希望能够)PowerShell的C#应用程序。由于IronPython和IronRuby完全基于DLR构建,因此使用它们的API基本相同。

IronPython.Hosting.Python.CreateEngine()

并且

IronRuby.Ruby.CreateEngine()

两者都创建了一个Microsoft.Scripting.Hosting.ScriptEngine的实例。有没有办法强制PowerShell 3.0创建ScriptEngine?除了PowerShell 3.0似乎建立在DLR 更多上面,我没有找到太多关于这个主题的信息(请参见http://huddledmasses.org/powershell-3-finally-on-the-dlr)。

从以下代码创建的PowerShell引擎似乎不能转换为ScriptEngine。

System.Management.Automation.PowerShell.Create()

我怀疑如果我真的想通过相同的API处理PowerShell,我需要创建自己的ScriptEngine来包装PowerShell主机。

2个回答

4

PowerShell V3确实使用了部分DLR,但仅限于.Net Frameworks V4中已经包含的部分。DLR项目具有许多有用的api,这些api未包含在.Net中,例如Microsoft.Scripting.Hosting.ScriptEngine。

如果PowerShell想要实现ScriptEngine api,则必须将这些api作为PowerShell的一部分来发布。但是,PowerShell团队不愿意承担这些api的所有权。

因此,您想要实现ScriptEngine,确实需要使用自己的代码来封装PowerShell。


-1

PowerShell 可以与 dotnet 程序集一起使用,当您拥有管理员配置文件并且想要执行高级指令时,它非常有趣。但是,作为开发人员,为什么要包装 PowerShell 呢?您可以从代码中访问所有的 dotnet 程序集。最好编写您想要的内容,而不是包装 PowerShell。 此致敬礼


1
我知道 PowerShell 有多么强大。我正在尝试构建自己的脚本环境,以了解嵌入 DLR 语言。我真的希望能够在同一个环境中拥有 PowerShell 和 IronPython。大多数 DLR 语言在嵌入它们方面的行为都是相同的。PowerShell 早于 DLR,所以我想知道是否有办法使其像其他 DLR 语言一样运行。 - Brad Campbell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接