是否可以使cmdlet同时使用所有项目进行管道传输?

时间:2013-09-25 03:34:42

标签: powershell scripting

今天晚上,我创建了一个cmdlet,列出了目录中的所有重复文件。这很愚蠢简单,它只能与目录中的所有文件一起使用,而且我并不热衷于重新发明轮子来添加过滤,所以这就是我想用它做的事情:

dir | duplicates | del

唯一的问题是,通常,管道中的任何给定命令一次只能处理一个对象,这对检测重复项没有任何帮助。 (当然,一组中没有重复,对吗?)

我是否有一个技巧可以让链中的第二个命令在完成工作之前从第一个命令中收集所有输出并将事情传递给第三个命令?

2 个答案:

答案 0 :(得分:2)

您可以一次处理单个文件,只需将收到的每个文件存储在Process块中,然后处理End块中的所有文件。这就是Group& amp;排序工作。在获得所有输入之前,他们无法进行分组或排序。一旦他们获得了所有输入,他们就会进行操作,然后再按照分组/排序顺序将结果再次按流程传输到管道中。

答案 1 :(得分:1)

所以当我洗澡的时候,我实际上想出了答案,然后回来发现Keith已经提供了它。无论如何,这是一个例子。

begin
{
    Add-Type -Path ($env:USERPROFILE + '\bin\CollectionHelper.cs');
    [string[]] $files = @()
}

process
{
    $files += $FullName
}

end
{
    [JMA.CollectionHelper]::Duplicates($files)
}