Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Powershell筛选器中嵌入管道操作符?_Powershell_Powershell 2.0 - Fatal编程技术网

如何在Powershell筛选器中嵌入管道操作符?

如何在Powershell筛选器中嵌入管道操作符?,powershell,powershell-2.0,Powershell,Powershell 2.0,我正在尝试创建一个按文件扩展名分组的筛选器。使用group operator,您可以轻松: $fileList | group { [io.path]::getextension($_) } 我想将上述内容制作成一个过滤器,以保存一些键入内容,因此我可以这样做: $fileList | group-by-extension 但是我很难找到正确的语法。这些显然不起作用,例如: filter group-by-extension { $_ | group { [io.path]::getexte

我正在尝试创建一个按文件扩展名分组的筛选器。使用group operator,您可以轻松:

$fileList | group { [io.path]::getextension($_) }
我想将上述内容制作成一个过滤器,以保存一些键入内容,因此我可以这样做:

$fileList | group-by-extension
但是我很难找到正确的语法。这些显然不起作用,例如:

filter group-by-extension { $_ | group { [io.path]::getextension($_) } }
function group-by-extension { $_ | group { [io.path]::getextension($_) } }

如何编写一个函数来接收管道并返回通过另一个过滤器运行的管道?

我不确定您是否特别希望按属性排序(本例中为扩展名)或更好地使用管道。假设这是你试图进入的分类,请允许我向你展示最简单的方法

Get-ChildItem | Sort-Object extension
这里有一个关于它的链接:

由于这需要多个关键字才能完成,因此不能使用别名。它必须作为函数编写。我喜欢两三个字母的命令名。Unix就是这样,它使打字更简单。也许可以让函数接受您想要排序的参数,该参数是sort对象所接受的任何参数。因此,我将其称为gcis for Get ChildItem排序。语法可能是“gcis扩展”

或者,如果你像我一样,你甚至不喜欢输入一个参数。(我在命令行上真的很懒)。将函数调用为gcie(用于扩展排序)、gcit(用于时间)、gcis(用于大小)或类似的东西。您可以使用名称重载来构建函数,使其根据您所调用的内容表现出不同的行为。或者,如果您不擅长重载,可以为每个函数创建一个单独的函数

我希望这有助于回答您的问题

问候,,
Rodney Fisk

过滤器作用于通过管道的每个单独对象。在代码中,基本上是一次对一个对象进行分组。您需要做的是将所有对象聚集在一起,然后将它们分组。可以将函数与开始、进程和结束块一起使用

function GroupBy-Extension {
BEGIN {$all = @() }
PROCESS { $all += $_}
END {$all | group extension}
}

啊哈!我不知道END可以返回值。好的,这就解决了我的具体问题,涉及到团队运作。但更一般地说,如果我想使用流媒体运营商(而不是group,比如“where”)并维护惰性评估,该怎么办?在这种情况下,我不希望在传递到下一个操作之前缓冲到本地数组中。您可能希望了解如何使用高级函数,特别是参数的AcceptValueFromPipeline=$True属性。这创造了一个非常好的用户体验。通常,如果要处理每个对象,可以将过滤器放在PRCOESS块中。