首页 > 解决方案 > 根据 Powershell 中对象的四个属性选择唯一对象

问题描述

这是对以下线程的跟进:

如何根据 powershell 中对象的两个属性选择唯一对象?

我有一个包含大约 20 个标题的 csv。我想对其中大约 4 个进行唯一排序,但要确保保留剩余的 16 个标题。

为了简化,我假设只有八个标题:

Host                           : ComputerA
IPv4 Address                   : 1.1.1.2
MAC Address                    : abcdef123456
Switch IP                      : 1.1.1.1
NIC Vendor                     : Dell
Device Type:                   : Workstation
Location                       : Office A
Comment:                       : Computer of CFO

在链接线程中找到的建议的、经过调整的解决方案对我不起作用。

以供参考:

$csvDataUnique = $csvData | 
  Group-Object 'User Name','Computer Name' | 
  %{ $_.Group | Select 'User Name','Computer Name' -First 1} | 
  Sort 'User Name','Computer Name' 

对于我的场景,我想在主机、IPv4 地址、MAC 地址和交换机 IP 上进行匹配,因此我尝试了以下命令:

$csvData = import-csv mydata.csv
$csvDataUnique = $csvData | 
  Group-Object 'Host', 'IPv4  Address', 'MAC Address', 'Switch IP' | 
  %{ $_.Group | Select 'Host', 'IPv4  Address', 'MAC Address', 'Switch IP' -First 1} | 
  Sort 'Host', 'IPv4  Address', 'MAC Address', 'Switch IP'
$csvDataUnique | export-csv "SortedData.csv"

当我尝试这样做时,它只输出四个选定的标题。如前所述,我希望也保留标题。

再次,供参考:

输入:

Host                           : ComputerA
IPv4 Address                   : 1.1.1.2
MAC Address                    : abcdef123455
Switch IP                      : 1.1.1.1
NIC Vendor                     : Dell
Device Type:                   : Workstation
Location                       : Office A
Comment:                       : Computer of CFO

Host                           : ComputerA
IPv4 Address                   : 1.1.1.2
MAC Address                    : abcdef123455
Switch IP                      : 1.1.1.1
NIC Vendor                     : Dell
Device Type:                   : Workstation
Location                       : Office A
Comment:                       :

Host                           : ComputerB
IPv4 Address                   : 1.1.1.3
MAC Address                    : abcdef123456
Switch IP                      : 1.1.1.1
NIC Vendor                     : Dell
Device Type:                   : Workstation
Location                       : Office A
Comment:                       :

Host                           : ComputerB
IPv4 Address                   : 1.1.1.3
MAC Address                    : abcdef123456
Switch IP                      : 1.1.1.1
NIC Vendor                     : Dell
Device Type:                   : Workstation
Location                       : Office A
Comment:                       :

期望的输出:

Host                           : ComputerA
IPv4 Address                   : 1.1.1.2
MAC Address                    : abcdef123455
Switch IP                      : 1.1.1.1
NIC Vendor                     : Dell
Device Type:                   : Workstation
Location                       : Office A
Comment:                       : Computer of CFO

Host                           : ComputerB
IPv4 Address                   : 1.1.1.3
MAC Address                    : abcdef123456
Switch IP                      : 1.1.1.1
NIC Vendor                     : Dell
Device Type:                   : Workstation
Location                       : Office A
Comment:                       :

任何帮助,将不胜感激。

标签: powershell

解决方案


您应该使用 Join-object 模块 https://www.powershellgallery.com/packages/Join-Object/2.0.1

这将允许您合并数据。


推荐阅读