【问题标题】:How does a C# runspace/pipeline execute a powershell script?C# 运行空间/管道如何执行 powershell 脚本?
【发布时间】:2013-08-01 04:59:02
【问题描述】:

关于如何从 C# 代码执行 powershell 脚本有很多问题和答案,但我想知道运行空间/管道 如何执行执行 .ps1 文件。

我要问的上下文是这样的: 我已经为设置新网站的 powershell 脚本构建了一个基本的 asp.net 前端。它在 IIS 中创建站点并设置 wwwroot 文件夹、日志文件夹、AD 用户以及它需要的所有其他内容。当我在 powershell 中以管理员身份运行它时,它可以完美运行。但是,当我通过我的 C# 管道运行它时,它会以参数绑定异常中断管道。

我不是在寻找这个特定问题的答案,我只是在寻找有关管道如何执行我的文件的解释,以便我可以更好地了解到底发生了什么在。

【问题讨论】:

    标签: c# powershell


    【解决方案1】:

    这不是对运行空间如何工作的完整解释,但我已经 written a blog post 涵盖了主要部分。

    也是来自one of the msdn pages on how powershell works的sn-p:

    Powershell 运行时作为运行空间调用,默认情况下, 同步处理命令并传递处理结果 到宿主应用程序,以便它们可以返回给用户。

    【讨论】:

      【解决方案2】:

      您是否尝试过使用ILSpy 或在类视图 中打开类来查看类的代码?我一直这样做是为了看看微软如何实现一个特定的类。如果它是一个简短的答案,我会在此处粘贴代码,但 System.Management.Automation.Runspaces 或 Microsoft.Powershell 命名空间有很多内容。自己看一下,你就能确切地看到微软是如何实现 Powershell 脚本的执行的。

      希望这会有所帮助。

      【讨论】:

      • 感谢 Adam,我试了一下,但它没有提供有关文件如何执行的任何额外信息。大多数方法都是这样的:public Collection<PSObject> Invoke() { using (Pipeline._trace.TraceMethod()) return this.Invoke((IEnumerable) null); } public abstract Collection<PSObject> Invoke(IEnumerable input);
      猜你喜欢
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      相关资源
      最近更新 更多