【问题标题】:Select top 5 items from each group using PowerShell使用 PowerShell 从每个组中选择前 5 项
【发布时间】:2017-05-29 07:36:02
【问题描述】:

是否有任何 1-2 行的解决方案可以使用 PowerShell 从每个组中选择前五项?

例如,按名称对Get-Process 返回的进程进行分组,并查看前三个 wp3 进程。

当然,我可以按每个唯一名称进行迭代,但我希望有更短的解决方案。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    你在这里,像以前一样使用Get-Process

    Get-Process | Group-Object ProcessName | ForEach-Object {
        $_ | Select-Object -ExpandProperty Group | Select-Object -First 5
    }
    

    这将按属性对事物进行分组,然后为每个组将组重新扩展为其原始形式,并选择前 5 个条目。

    我想您也可以在 Select-Object -First 5 管道之前对其进行排序,以便仅获得它的最高 CPU 使用率属性或其他东西,而不仅仅是 5 个看似随机的属性。

    【讨论】:

    • 那么冗长 ;) get-process|group name|%{$_.group[0..4]}
    • @TessellatingHeckler Verbosity 是明确的清晰度。在书面脚本中,尤其是在教程中,最好使用完整的命令名称。简而言之,别名会发生变化,您无法确定它们是否会存在于每个系统或每个版本的 PowerShell(尤其是 PowerShell 6+)上。别名应保留用于命令行中的临时语句,而不是需要移植或被大于 1 的观众理解的正式写作。
    【解决方案2】:

    对于你想要的,也许Format-Table -GroupBy ProcessName 会是一个更好的选择,例如:

    Get-Process | Format-Table -GroupBy ProcessName
    

    【讨论】:

    • 如果您想将结果输出到屏幕,这可能是一个很好的解决方案,但我只需要一个结果数组。
    • 好吧,你说" and *see* first 3 wp3 processes"。 :-)
    • 哦,我明白了:),抱歉误导。
    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 2020-08-11
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多