8

我一直在使用托管 IronPython、IronRuby 和(希望如此)PowerShell 的 ac# 应用程序。由于 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 主机。

4

2 回答 2

4

PowerShell V3 确实使用了一些 DLR,但仅使用了 .Net Frameworks V4 中提供的部分。DLR 项目有许多 .Net 中未包含的有用 api,例如 Microsoft.Scripting.Hosting.ScriptEngine。

如果 PowerShell 想要实现 ScriptEngine api,PowerShell 必须将这些 api 作为 PowerShell 的一部分提供。PowerShell 团队不愿意拥有这些 API。

因此,如果您想实现 ScriptEngine,则假设您需要用自己的代码包装 PowerShell 是正确的。

于 2013-09-24T00:02:10.830 回答
-1

PowerShell 与 dotnet 程序集一起使用,当您拥有管理员配置文件并且想要进行高级说明时非常有趣。但是您是开发人员,所以为什么要包装 PowerShell,您可以从您的代码中访问所有 dotnet 程序集。最好编写您的代码想要而不是包装 PowerShell 最好的尊重

于 2012-07-22T07:51:34.943 回答