我正在尝试格式化来自管道的对象,如下所示
function Format-Nice
{
[CmdletBinding()] param(
[Parameter(ValueFromPipeline=$true)]$objects
)
process {
$objects | Format-Table -Property Name,
@{Label='Size';expression={[int]($_.Length/1MB) }}
}
}
然而,这似乎是在shell上的一个单独的表中打破管道中的每个对象。我打算编写一个通用格式函数,它将根据管道中的当前对象类型提供自定义哈希表表达式。
答案 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()
}
}