如何从powershell中最常使用字段的表变量中获取数据?

问题描述

我有 $mydata 变量,其中包含使用以下命令的 AD 内容$mydata = Get-ADUser -Filter {(enabled -eq $true)} -Properties * | select name,OfficeName,Company

它看起来像:

Name    OfficeName     Company
A       north          ABC
B       north          ABC
C       north          ABC
D       South          KLM
E       South          KLM
F       South          KLM
G       South          BCD
H       South          BCD
I       South          MNO
J       East           FGV
K       East           XYZ
L       East           XYZ

我想得到一个显示 OfficeName 和最常用公司的输出,所以预期的输出是:

OfficeName     Company
 north          ABC
 South          KLM
 East           XYZ

总会有一家公司占多数,所以数量相等不是个案。

我怎样才能做到这一点?我认为它应该类似于下面的内容,但找不到正确的语法。任何帮助将不胜感激。

$mydata | group-object -Property OfficeName| Select-Object OfficeName,@{n='Company'; e = { $_.Group | group-object -Property Company | sort-object -Property Count -Descending | Select-Object -First 1 -ExpandProperty OfficeName} }

解决方法

这个对我有用:

$mydata | 
    Group-Object OfficeName | 
    Select-Object @{ n = 'OfficeName'; e = { $_.Name } },@{ n = 'Company'; e = { $_.Group | 
                      Group-Object Company | 
                      Sort-Object Count -Descending | 
                      Select-Object -First 1 -ExpandProperty Name } }

输出:

OfficeName Company
---------- -------
East       XYZ    
North      ABC    
South      KLM  

诀窍是使用 Name 而不是实际的属性名称。 Name 输出中的 Group-Object 属性存储组所基于的值。