当您覆盖 Out-Default
指令,做一些有意义的事情时,您需要确保原始的行为没有丢失,而只是加入新的功能。以下是一个使用“代理函数“概念的示例。
原始输入被转发(代理)到原始的 Out-Default
cmdlet。此外,函数打开自己的私有 Out-GridView
窗口并将输出回显到该窗口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| function Out-Default { param( [switch] $Transcript,
[Parameter(ValueFromPipeline=$true)] [psobject] $InputObject )
begin { $pipeline = { Microsoft.PowerShell.Core\Out-Default @PSBoundParameters }.GetSteppablePipeline($myInvocation.CommandOrigin) $pipeline.Begin($PSCmdlet)
$grid = { Out-GridView -Title 'Results' }.GetSteppablePipeline() $grid.Begin($true)
}
process { $pipeline.Process($_) $grid.Process($_) }
end { $pipeline.End() $grid.End() }
} `
要移除覆盖函数,只需要运行:
```powershell PS C:\> del function:Out-Default
|