PowerShell 技能连载 - 覆盖 Out-Default(第 2 部分)

当您覆盖 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

PowerShell 技能连载 - 覆盖 Out-Default(第 2 部分)

http://blog.vichamp.com/2019/07/05/overriding-out-default-part-2/

作者

吴波

发布于

2019-07-05

更新于

2022-07-06

许可协议

评论