Powershell 管道中以前的commandlet

Powershell 管道中以前的commandlet,powershell,Powershell,我正在尝试编写一个powershell管道函数,想知道是否有办法找出管道中的前一个命令 Get-ChildItem | format-nice Get-ChildItem | Pipeline -Verbose 有没有办法在格式nice的上下文中找到Get ChildItem是管道上的前一个commandlet 谢谢, Shiju您可以使用Get-PSCallStack在函数中定位管道命令,以定位以前使用的命令。所以像这样的函数 Function Pipeline { [cmdlet

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

Get-ChildItem | format-nice
Get-ChildItem | Pipeline -Verbose
有没有办法在格式nice的上下文中找到Get ChildItem是管道上的前一个commandlet

谢谢,
Shiju

您可以使用Get-PSCallStack在函数中定位管道命令,以定位以前使用的命令。所以像这样的函数

Function Pipeline {
    [cmdletbinding()]
    Param(
        [parameter(ValueFromPipeline)]
        $InputObject
    )
    $PreviousCommand = (Get-PSCallStack).InvocationInfo[1].MyCommand.Definition
    Write-Verbose "Command: $(($PreviousCommand | Out-String))"
}
…然后可以在管道中使用,您可以知道管道中使用了哪些命令

Get-ChildItem | format-nice
Get-ChildItem | Pipeline -Verbose
VERBOSE:Command:Get ChildItem | Pipeline-VERBOSE

VERBOSE:Command:getchilditem| 获取项目| 管道-详细

请记住,这是脆弱的,如果您在一次执行中运行多个命令,而不是通过管道执行,那么它将显示更多内容。例如,如果调用函数并在同一次执行中运行命令,则结果可能如下:

详细:命令:函数管道{ [cmdletbinding()] Param( [参数(ValueFromPipeline)] $InputObject ) $PreviousCommand=(Get-PSCallStack).InvocationInfo[1].MyCommand.Definition 详细写入“命令:$($PreviousCommand | Out String))” } 获取子项|管道-详细