如何获取管道cmdlet中以前的名称?

时间:2018-05-17 09:27:38

标签: powershell

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

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

是否有一个公共代码来确定管道cmdlet中的上一个?是否有具有此类功能的模块?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

执行此操作会使输出模糊不清,但您可以将其添加为输出之一。通过获取该字符串输出并通过管道字符将其拆分,可以创建如何使用它来确定管道中精确的先前参数。无论您想要哪个输出,您都需要通过计算您所在的拆分列表中的哪个项目将其封装在脚本块中。作为管道的一部分在一行中执行此操作将产生不希望的结果。

答案 1 :(得分:0)

目前还不清楚你的目标是什么。

以前在ForEach中迭代$PsItem/$_

除了将前一个存储在变量中?

$prevCmdletName = ""
Get-ChildItem myDir\*.ps1 | ForEach-Object { 
    "Current {0} previous {1}" -f $_,$prevCmdletName 
    $prevCmdletName=$_
}