问题描述
我有 $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
属性存储组所基于的值。