我正在尝试编写一个powershell管道函数,并想知道是否有办法找出管道中的前一个命令。
Get-ChildItem | format-nice
有没有办法在format-nice的上下文中找到Get-ChildItem是管道上的前一个命令行开关?
谢谢, 石咀
答案 0 :(得分:2)
您可以使用Get-PSCallStack在函数中找到管道命令,以找到以前使用的命令。所以像这样的函数......
Function Pipeline {
[cmdletbinding()]
Param(
[parameter(ValueFromPipeline)]
$InputObject
)
$PreviousCommand = (Get-PSCallStack).InvocationInfo[1].MyCommand.Definition
Write-Verbose "Command: $(($PreviousCommand | Out-String))"
}
...然后可以在管道中使用,您可以告诉管道中使用了哪些命令。
Get-ChildItem | Pipeline -Verbose
VERBOSE:命令:Get-ChildItem |管道-Verbose
Get-ChildItem |
Get-Item |
Pipeline -Verbose
VERBOSE:命令:Get-ChildItem | Get-Item | 管道-Verbose
请记住,这是脆弱的,如果你在一次执行中运行多个命令超出了通过管道的内容,它将显示更多的东西。例如,如果您调用该函数并在同一执行中运行命令,它可能最终会像这样:
VERBOSE:命令:函数管道{ [列出CmdletBinding()] 参数( [参数(ValueFromPipeline)] $ InputObject ) $ PreviousCommand =(Get-PSCallStack).InvocationInfo [1] .MyCommand.Definition Write-Verbose“命令:$(($ PreviousCommand | Out-String))” } Get-ChildItem |管道-Verbose