管道中的上一个命令行开关

时间:2015-08-07 10:15:44

标签: powershell

我正在尝试编写一个powershell管道函数,并想知道是否有办法找出管道中的前一个命令。

Get-ChildItem | format-nice

有没有办法在format-nice的上下文中找到Get-ChildItem是管道上的前一个命令行开关?

谢谢, 石咀

1 个答案:

答案 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