C#中的Pipeline和PowerShell类之间的区别

时间:2018-07-13 04:42:42

标签: c# powershell runspace

我想知道使用C#类与Pipeline类在PowerShell中执行PowerShell脚本之间的区别。

使用管道:

Pipeline pipe = runspace.CreatePipeline();

使用PowerShell类:

PowerShell ps = PowerShell.Create();

我们可以使用它们两者在C#中执行PowerShell脚本,但是它们之间有什么区别?

2 个答案:

答案 0 :(得分:2)

您应该阅读文档。 pipelinerunspace的功能。 PowerShell.Create()方法将创建一个PowerShell对象,该对象是所有内容的包装器。这两种方法都属于同一个PowerShell SDK。

Pipeline用于运行命令,并且位于runspace对象的下方。

更多

Pipeline Class (msdn)

PowerShell Class (msdn)

答案 1 :(得分:2)

注意:PowerShell SDK documentation非常稀疏,因此以下是投机性

  • PowerShell类的实例是 runspace (运行PowerShell会话的容器)的包装。其.RunSpace属性返回封闭的运行空间。

  • 您需要一个运行空间(RunSpace实例)才能创建并执行管道以执行任意PowerShell语句。

  • 要创建管道,您有两个选择:

    • 如果您有PowerShell实例,则可以使用其方便的方法,例如.AddScript()隐式创建管道。

    • 或者,使用运行空间的.CreatePipeline()方法显式创建和管理管道。

简单地说: PowerShell类的便捷方法允许更简单地创建和执行管道。

请注意,这两种方法均支持执行 multiple 语句,包括命令(例如,cmdlet调用)和表达式(例如,1 + 2)的任意组合。 / p>

以下代码段比较了两种方法(使用PowerShell本身),据我所知,它们在功能上是等效的:

# Create a PowerShell instance and use .AddScript() to implicitly create
# a pipeline that executes arbitrary statements.
[powershell]::Create().AddScript('Get-Date -DisplayHint Date').Invoke()

# The more verbose equivalent using the PowerShell instance's .RunSpace
# property and the RunSpace.CreatePipeline() method.
[powershell]::Create().RunSpace.CreatePipeline('Get-Date -DisplayHint Date').Invoke()

我可能缺少一些微妙之处;确实告诉我们。