我想知道使用C#
类与Pipeline
类在PowerShell
中执行PowerShell脚本之间的区别。
使用管道:
Pipeline pipe = runspace.CreatePipeline();
使用PowerShell类:
PowerShell ps = PowerShell.Create();
我们可以使用它们两者在C#中执行PowerShell脚本,但是它们之间有什么区别?
答案 0 :(得分:2)
您应该阅读文档。 pipeline
是runspace
的功能。 PowerShell.Create()
方法将创建一个PowerShell
对象,该对象是所有内容的包装器。这两种方法都属于同一个PowerShell SDK。
Pipeline
用于运行命令,并且位于runspace
对象的下方。
答案 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()
我可能缺少一些微妙之处;确实告诉我们。