为什么对Powershell管道的输出进行分组有时不起作用?

时间:2014-09-16 10:38:02

标签: powershell

我已经读过Format-Table-GroupBy)的输出不是 分组,你需要1.排序和2.传递-AutoSize。有时这不是 似乎工作。这是我提出的测试案例:

PS C:\> ls -Path C:\Windows\help -Include "*.chm" -Recurse|sort Directory|ft -GroupBy Directory -Auto

    Directory: C:\Windows\help

Mode         LastWriteTime Length Name
----         ------------- ------ ----
-a--- 23.05.2011     10:54  21544 NVWCPFI.chm

    Directory: C:\Windows\help

Mode         LastWriteTime Length Name
----         ------------- ------ ----
-a--- 23.05.2011     10:54  21879 NVWCPESM.chm

...

为什么输出不按目录分组?为什么有两个单独的条目 对于同一目录?如何对输出进行分组? (请忽略这个事实, 第一个命令的输出已经分组,我只使用此命令 一个测试用例。)

修改

正如我所指出的,我最初忘记了要排序的Directory参数。 (输出仍然存在同样的问题。)

我正在使用Powershell 2.0

2 个答案:

答案 0 :(得分:1)

为了在Format-Table中对输出进行分组,首先需要对其进行排序。一个关于此问题的讨论的technet博客是here。虽然您有Sort-Object cmdlet,但您不选择要排序的值。 注意我在PowerShell 3.0上使用cmdlet得不到相同的输出

Get-ChildItem -Path C:\Windows\help -Include "*.chm" -Recurse| Sort-Object Directory | Format-Table -GroupBy Directory

输出确实会被排序,但我认为这不是你想要的。可能更期望的另一种方法是使用Select-Object仅输出所需信息。

Get-ChildItem -Path C:\Windows\help -Include "*.chm" -Recurse| Sort-Object Directory | Select Name,Directory | Format-Table -AutoSize

您需要尝试使用Select-Object的值来获得所需的输出。下一个示例将为您提供文件夹中chm的计数信息。根本不是Format-Table相关的,而是有趣的。

Get-ChildItem -Path C:\Windows\help -Include "*.chm" -Recurse | Group-Object Directory 

答案 1 :(得分:0)

如果工作,请尝试此操作:

...|sort directory |ft -GroupBy...