Powershell 管道格式问题
我正在尝试格式化来自管道的对象,如下所示Powershell 管道格式问题,powershell,Powershell,我正在尝试格式化来自管道的对象,如下所示 function Format-Nice { [CmdletBinding()] param( [Parameter(ValueFromPipeline=$true)]$objects ) process { $objects | Format-Table -Property Name, @{Label='Size';expressi
function Format-Nice
{
[CmdletBinding()] param(
[Parameter(ValueFromPipeline=$true)]$objects
)
process {
$objects | Format-Table -Property Name,
@{Label='Size';expression={[int]($_.Length/1MB) }}
}
}
然而,这似乎是在shell上的一个单独表中断开管道中的每个对象。我打算编写一个通用格式函数,该函数将根据管道中的当前对象类型提供自定义哈希表表达式。您需要使用
SteppablePipeline
,这样您就不会为每个输入对象运行格式表的新副本:
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()
}
}
您需要使用SteppablePipeline
,这样您就不会为每个输入对象运行格式表的新副本了:
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()
}
}
您需要使用SteppablePipeline
,这样您就不会为每个输入对象运行格式表的新副本了:
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()
}
}
您需要使用SteppablePipeline
,这样您就不会为每个输入对象运行格式表的新副本了:
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()
}
}
“这似乎是在一个单独的表中断开管道中的每个对象”我无法复制此行为(在PS 2.0中)。“这似乎是在一个单独的表中断开管道中的每个对象”我无法复制此行为(在PS 2.0中)。“这似乎是在一个单独的表中断开管道中的每个对象”我无法复制此行为(在PS 2.0中)。“这似乎是在将管道中的每个对象从一个单独的表中断开”我无法复制此行为(在PS 2.0中)。@ShijuSamuel很遗憾,我唯一能向您指出的是关于,但是它确实缺乏使用示例。@ShijuSamuel另一个可步进管道使用示例可以在PowerShell中的mkdir
函数中找到:Get命令mkdir | Select Object-ExpandProperty Definition
@ShijuSamuel遗憾的是,我唯一能指给你的是关于,但是它确实缺乏使用示例。@ShijuSamuel另一个可步进管道使用示例可以在PowerShell中的mkdir
函数中找到:Get命令mkdir | Select Object-ExpandProperty Definition
@ShijuSamuel遗憾的是,我唯一能指给你的是关于,但是它确实缺乏使用示例。@ShijuSamuel另一个可步进管道使用示例可以在PowerShell中的mkdir
函数中找到:Get命令mkdir | Select Object-ExpandProperty Definition
@ShijuSamuel遗憾的是,我唯一能指给你的是关于,但是它确实缺少使用示例。@另一个可分步管道使用示例可以在PowerShell中的mkdir
函数中找到:Get命令mkdir |选择对象-ExpandProperty定义