首页 > 解决方案 > 抑制数组列表添加方法管道输出

问题描述

我正在使用一个数组列表来构建一系列日志项以供以后记录。工作一种享受,但 Add 方法将当前索引发送到管道。我可以通过将它发送到 $null 来解决这个问题,就像这样

$strings.Add('junk') > $null

但我想知道是否有某种机制可以全局更改 Add 方法的行为。现在我确实有成千上万的> $null声誉,这很丑陋。尤其是当我忘记一个的时候。

我真的很想看到某种超越所有自动流水线的全局变量。在编写大型脚本时,我想故意发送到管道,因为意外的自动发送到管道是我所有错误的很大一部分,并且最难找到。

标签: powershellpipeline

解决方案


您可以使用自定义方法将您ArrayList的自定义对象包装起来。Add()

$log = New-Object -Type PSObject -Property @{
    Log = New-Object Collections.ArrayList
}
$log | Add-Member -Type ScriptMethod -Name Add -Value {
    Param(
      [Parameter(Mandatory=$true)]
      [string]$Message
    )

    $this.Log.Add($Message) | Out-Null
}

$log.Log.Add('some message')  # output on this is suppressed

推荐阅读