管道格式问题

时间:2015-08-06 08:30:13

标签: powershell

我正在尝试格式化来自管道的对象,如下所示

function Format-Nice
{
        [CmdletBinding()] param(
            [Parameter(ValueFromPipeline=$true)]$objects
        )
        process {
            $objects | Format-Table -Property Name, 
            @{Label='Size';expression={[int]($_.Length/1MB) }}
        }
}

然而,这似乎是在shell上的一个单独的表中打破管道中的每个对象。我打算编写一个通用格式函数,它将根据管道中的当前对象类型提供自定义哈希表表达式。

1 个答案:

答案 0 :(得分:3)

您需要使用SteppablePipeline,因此您不会为每个输入对象运行Format-Table的新副本:

function Format-Nice
{
    [CmdletBinding()] param(
        [Parameter(ValueFromPipeline=$true)][PSObject]$InputObject
    )
    begin {
        $SteppablePipeline={
            Format-Table -Property Name,
            @{Label='Size';expression={[int]($_.Length/1MB) }}
        }.GetSteppablePipeline($MyInvocation.CommandOrigin);
        $SteppablePipeline.Begin($PSCmdlet)
    }
    process {
        if($MyInvocation.ExpectingInput) {
            $SteppablePipeline.Process($InputObject)
        } else {
            $SteppablePipeline.Process()
        }
    }
    end {
        $SteppablePipeline.End()
        $SteppablePipeline.Dispose()
    }
}