C# Cmdlet通过管道一次性传递参数列表,而不是单个列表项

C# Cmdlet通过管道一次性传递参数列表,而不是单个列表项,c#,powershell,pipeline,cmdlet,pscmdlet,C#,Powershell,Pipeline,Cmdlet,Pscmdlet,我正在创建PowershellSystem.Management.AutomationCmdlet.Cmdlet,用于通过管道将字符串列表传递给Cmdlet,方法如下: [Cmdlet(VerbsCommon.Add, "Signature")] public class AddSignature : Cmdlet ... [Parameter(Position = 0, ValueFromPipeline = true)] public List<string&g

我正在创建Powershell
System.Management.AutomationCmdlet.Cmdlet
,用于通过管道将字符串列表传递给Cmdlet,方法如下:

  [Cmdlet(VerbsCommon.Add, "Signature")]
  public class AddSignature : Cmdlet
...
    [Parameter(Position = 0, ValueFromPipeline = true)]
    public List<string> Items { get; set; }
...
是否有可能一次性传递整个项目列表(由Get ChildItem返回)?我一次只买一件东西

基本上,我希望使用管道的行为与使用类似命令的行为相同(
Items.Count==3


有什么想法吗?

实际上我一直在想同样的事情,尽管我的重点是直接从Powershell使用它,而不是在C#中。我认为这样做会有某种属性或官方方式

我看到的术语是“暂停管道”中的暂停,有时是缓冲区。我可以想出两个官方cmdlet来执行此操作:
Sort Object
暂停,因为它需要所有对象才能对它们进行排序<代码>格式表-自动调整大小会暂停,因为它需要所有对象才能确定列的大小

我在Powershell中提出了以下解决方法:

function Stall-Pipeline {
[CmdletBinding()]
param(
    [Parameter(
        ValueFromPipeline
    )]
    [String]
    $Msg
)

    Begin {
        Write-Verbose "Begin"
        $all = @()
    }

    Process {
        Write-Verbose "Process"
        $all += $Msg
    }

    End {
        Write-Verbose "End"
        foreach($item in $all) {
            # processing 
            $item # processed item
        }
    }
}
基本上,我使用
begin
块初始化一个变量,该变量将保存所有结果。
process
块添加到该变量,然后
end
块执行所有实际处理并将项目发送到管道

'item1','item2','item3' | Add-Signature
您可以使用
-Verbose
调用它,以查看何时调用每个块


如果有更好的方法,一种更正式或更受支持的方法,我很想知道这是什么。

我还想用“结束”方法做实际工作,尽管这并不真正符合这种方法的含义。如果我没有找到更好的解决方案,这可能就是我的出路。
function Stall-Pipeline {
[CmdletBinding()]
param(
    [Parameter(
        ValueFromPipeline
    )]
    [String]
    $Msg
)

    Begin {
        Write-Verbose "Begin"
        $all = @()
    }

    Process {
        Write-Verbose "Process"
        $all += $Msg
    }

    End {
        Write-Verbose "End"
        foreach($item in $all) {
            # processing 
            $item # processed item
        }
    }
}