从Pipline显示最后一个对象

时间:2018-04-02 18:35:10

标签: powershell pipeline powershell-v5.0

我有一个PowerShell函数(Out())。当我想得到一个结果时,它从pipline获取最后一个对象。例如:我想在(gps)中显示所有对象:

function Out() {
    [CmdletBinding()]
    [Alias()]
    Param(
        [Parameter(Mandatory=$false,
                   ValueFromPipeline=$true,
                   Position=0)]
        $Out
    )
    $Out
}

结果:

PS C:\> gps | Out

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName          
-------  ------    -----      -----     ------     --  -- -----------          
    505      27     7796       6220       0.78  13160   0 wmpnetwk 

1 个答案:

答案 0 :(得分:1)

将输出放在Process {}块中:

function Out() {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$false, ValueFromPipeline=$true, Position=0)]
        $Out
    )

    Process {
        $Out
    }
}

为从管道接收的每个对象调用该块。

来自documentation

  

过程

     

此块用于为函数提供逐个记录的处理。此块可能会被使用多次,或者根本不会被使用,具体取决于函数的输入。例如,如果函数是管道中的第一个命令,则将使用Process块一次。如果该函数不是管道中的第一个命令,则Process块对于函数从管道接收的每个输入都使用一次。如果没有管道输入,则不使用Process块。

     

如果将函数参数设置为接受管道输入,则必须定义此块。如果未定义此块并且参数接受来自管道的输入,则该函数将错过通过管道传递给函数的值。