powershell - 按共同点分组
问题描述
试图弄清楚如何为机器数据集获取通用配置(安装的产品和版本)。
数据结构如下:
Device Name Product Name Product Version OS
Computer 1 Visio 16.0.11929 Windows 10
Computer 2 Visio 16.0.11929 Windows 10
Computer 3 Visio 16.0.11000 Windows 7
Computer 4 Visio 16.0.11929 Windows 7
Computer 5 Visio 16.0.11000 Windows 10
Computer 1 PowerBI 2.72.5556 Windows 10
Computer 2 PowerBI 2.72.5556 Windows 10
Computer 5 PowerBI 2.72.5556 Windows 10
Computer 1 WebEx 40.1.8.5 Windows 10
Computer 2 WebEx 40.1.8.5 Windows 10
Computer 3 WebEx 38.1.6.3 Windows 7
Computer 5 WebEx 40.1.8.5 Windows 10
试图得到这样的输出:
Count OS Product Name Product Version
2 Windows 10 Visio 16.0.11929
PowerBI 2.72.5556
WebEx 40.1.8.5
1 Windows 7 Visio 16.0.11000
WebEx 38.1.6.3
1 Windows 7 Visio 16.0.11929
1 Windows 10 Visio 16.0.11000
PowerBI 2.72.5556
WebEx 40.1.8.5
我以为我可以使用这样的东西,但是它没有以正确的方式分组:
group-object -property 'Product Name', 'Product Version', OS
解决方案
首先重新排列您的数据,以便将属于同一台计算机的所有行分组在一起:
$Computers = $profiles |Group-Object 'Device Name' |ForEach-Object {
[pscustomobject]@{
Name = $_.Name
OS = $_.Group[0].OS
Software = $_.Group |ForEach-Object {
"$($_.'Product Name') $($_.'Product Version')"
} |Sort-Object
}
}
现在Software
每台机器上安装的列表是一个排序的字符串列表,将列表转换为单个字符串-join
将允许我们现在比较和分组,更接近您的预期输出:
PS C:\> $Computers |Group-Object OS,{$_.Software -join ', '} -NoElement |Sort Count -Descending |Format-Table -AutoSize
Count Name
----- ----
2 Windows 10, PowerBI 2.72.5556, Visio 16.0.11929, WebEx 40.1.8.5
1 Windows 10, PowerBI 2.72.5556, Visio 16.0.11000, WebEx 40.1.8.5
1 Windows 7, Visio 16.0.11000, WebEx 38.1.6.3
1 Windows 7, Visio 16.0.11929
推荐阅读
- css - 我怎样才能得到按钮里面的盒子?
- javascript - 插入 .txt 文件的文本框值
- dataframe - 试图在 Julia 中分隔表格数据的列未对齐
- regex - 为什么这个 nginx 正则表达式不能正常工作?
- wpf - 'Could not load type 'System.IO.Compression.ZipFile' from assembly 'Newtonsoft.Json'
- javascript - amcharts - ClockHand - 如何添加工具提示
- python - 在 python 中使用数据透视表时在行级别添加总计
- c# - ThreadPool 线程是否有理由停止在另一个模块中调用 COM 方法?
- node.js - 带有 Apache 代理的 Socket.io(连接被拒绝)
- javascript - 如何使用 glideajax 发送文件?