2014-02-25 22 views
0

我想创建一个嵌套的管道。现在我在这个嵌套管道中运行的cmdlet需要检查它是否从嵌套管道运行。从嵌套管道运行时,它需要表现得有点不同。从cmdlet的内部管道获取信息

任何人都可以帮助如何确定该cmdlet是否从嵌套管道运行?

我用下面的代码来创建嵌套的管道:

Pipeline pipeline = Runspace.DefaultRunspace.CreateNestedPipeline("cmdletName","true") 
+0

我感觉有缺陷的设计。 –

回答

0

我倾向于@Ansgar Wiechers同意,我认为你不一定接近管道的“正确”的方式。

PowerShell旨在使用与流水线操作员|连接在一起的独立小命令将数据从一个cmdlet传递到另一个cmdlet。物理创建一个嵌套管道会破坏这个约定,并且会使事情过于复杂。

PowerShell确实有几种方法来处理管道以及数据如何通过它们(例如,使用Begin,Process,End块)。以下是使用以下参考文章的链接:Grown-Up PowerShell Functions。它解释了PowerShell的流水线如何工作,以及如何使用Begin,Process,End块以及如何创建cmdlet,并且非常值得您阅读。

- 编辑 -

我想我更好地理解你的意思。你正在C#程序中运行PowerShell(因此需要创建一个嵌套管道)。

要查看管道是否嵌套,可以使用Pipeline.IsNested属性。

+0

我正在创建一个嵌套管道,因为我想从已经运行的cmdlet中调用一个cmdlet。所以我在同一个运行空间中创建了一个嵌套管道,并且在这个管道中是第二个cmdlet。从另一个cmdlet调用此cmdlet时需要采取不同的行为。 – user3351603

+0

请参阅上述编辑。 – HAL9256

+0

不,我不能使用pipeline.isNested属性,因为我没有管道的名称来使用这个属性。我需要在这个嵌套管道中运行的cmdlet中检查它。现在,此cmdlet的函数将不具有用于创建嵌套管道的Pipeline变量。 – user3351603