首页 > 解决方案 > 如何在管道 cmdlet 中获取前一个的名称?

问题描述

如何在管道 cmdlet 中获取前一个的名称?例如:

gci myDir\*.ps1 | % { $prevCmdletName = ...?... }
resolve-Path myDir\*.ps1 | % { $prevCmdletName = ...?... }
gci myDir\*.ps1 | ? { $_.fullname -match 'tests' } | % { $prevCmdletName = ...?... }
test1.ps1, test2.ps1 | % { $prevCmdletName = ...?... }

是否有一个通用代码来确定管道 cmdlet 中的前一个?有没有这样功能的模块?

谢谢。

标签: powershell

解决方案


你可能追求的是成绩单start-transcript filepath\filename。这实际上取决于所需的最终结果是什么,但是脚本会向您指示正在执行的命令以及这些命令正在执行的操作。

如果您希望您的代码在运行时告诉您正在运行什么命令,那么这是一个看似奇怪的要求 - 但是可以完成。

gci c:\ | % {(Get-PSCallStack).Position.StartScriptPosition.GetFullScript()}

这样做会掩盖您的输出,但您可以将其添加为输出之一。创造性地使用它来确定管道中精确的先前参数,可以通过获取该字符串输出并将其按管道字符拆分来完成。无论您想要哪种输出,您都需要通过计算您所追求的拆分列表中的哪个项目来将其封装在脚本块中。作为管道的一部分在一条线上执行所有这些操作将产生不希望的结果。


推荐阅读