如何在Powershell筛选器中嵌入管道操作符?
我正在尝试创建一个按文件扩展名分组的筛选器。使用group operator,您可以轻松:如何在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
$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块中。