Powershell格式表或选择对象仅显示顶部结果



我正在努力寻找发送电子邮件最多的用户。但最后我只想显示前10名(或n个)发件人。是否有一种方法可以使用选择对象或格式表仅显示顶部结果

$Messages = Get-ExchangeServer * | where{$_.ServerRole -eq "HubTransport"} | %{get-messagetrackinglog -server $_.name -EventID "SEND" -Start (get-date -format G).AddDays(-1) -ResultSize unlimited}) 2>&1 | out-null
$messages | where{$_.sender -like "*@OurDomain.com*"} | select sender | group sender | sort count -Descending | ft count,name

有没有办法让它只显示最热门的结果?

我能想到的唯一方法是将它们存储在一个变量中,并在for循环

中输出

ft之前,添加:

select -first 10

用你想要的数量替换10。

所以完整的命令是:

$messages | where{$_.sender -like "*@OurDomain.com*"} | select sender | group sender | sort count -Descending | select -first 10 | ft count,name

这是很久以前问过的。但有一件事让我很惊讶,你在使用select,却没有看到这个东西。好吧,如果你认为这是一个粗鲁的回答——不,不会的。关键是你离解决方案这么近了。所以几天前(顺便说一句,我对powershell了解不多),有人问我这个问题,我不得不只展示前几天的内容。所以我做的第一件事是get-help *display*认为它会以某种方式向我展示一些东西,让我展示一些内容。我错了,意识到我需要找点什么。然后我找动作词或动词。我检查了get-Verb,然后我可以看到相关的动词。

我找到了select。这听起来很合理,然后我打开了select的帮助。get-help select -ShowWindow。我检查了参数,发现了这个


    -First <Int32>
        Gets only the specified number of objects. Enter the number of objects to get.
        Required?                    false
        Position?                    named
        Default value                False
        Accept pipeline input?       False
        Accept wildcard characters?  false

就是这样。我对力量壳一无所知,但我想通过这样的锻炼仍然可以找到它。

对你来说,你知道它会是select,所以你可以很容易地检查参数来解决它。事实上,即使是关于如何做事情的例子也很有帮助。例如,在发现First之后,我得到了这个例子,它让我清楚地了解了语法。

PS C:>Get-Process | Sort-Object -Property WS | Select-Object -Last 5 
    Handles  NPM(K)    PM(K)      WS(K) VS(M)   CPU(s)     Id ProcessName
    -------  ------    -----      ----- -----   ------     -- -----------
    2866     320       33432      45764   203   222.41   1292 svchost
    577      17        23676      50516   265    50.58   4388 WINWORD
    826      11        75448      76712   188    19.77   3780 Ps
    1367     14        73152      88736   216    61.69    676 Ps
    1612     44        66080      92780   380   900.59   6132 INFOPATH

是的,这也可以是第一,我做到了,并得到了结果。

PS C:WINDOWSsystem32> Get-Process | Sort-Object -Property WS | Select-Object -First 5
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
      0       0       60          8                 0   0 Idle
    841      39    22988          8       0.69   2540   3 SystemSettings
    538      38    17900         36       0.97  12636   3 WinStore.App
    452      29    16568         44       0.81  25724   3 Video.UI
    181      11     1800        832       0.08   6544   0 GoogleCrashHandler

注意:前面的答案非常棒,展示了OP所需要的一切。我只是在展示我解决同样问题的方法。

最新更新