2015-07-10 109 views
4

我有一个有6个属性的对象数组。这是这样的:如何根据PowerShell中对象的两个属性选择唯一对象?

$csvData 
CURRENT DATE AND TIME : 07/10/2015 08:17:17 CST 
USER NAME    : userName 
COMPUTER NAME   : computerName 
IP ADDRESS   : 192.168.1.1 
LOGON SERVER   : logonServer 
LOGON/OFF    : logon 

我想创造一个用户名和计算机名称不被复制对象的数组。我如何才能在PowerShell中获得唯一的用户名/计算机名组合?最终,我想删除所有重复项并添加一个属性“计数”,以跟踪有多少重复项。

我曾尝试:

$csvDataUnique = $csvData | Select-Object 'User Name','Computer Name' -Unique 
$csvDataUnique = $csvData | sort -Property 'User Name' | Get-Unique 
+0

我也有尝试: '$ csvData = $ csvData.GetEnumerator()| %{$ _。'用户名',$ _''计算机名'} |选择对象独特“ – ericalle

回答

1

我通常求助于使用哈希表,并加入属性值的键那种任务:

$CSVDataUnique = @{} 

$csvData | foreach { 
$CSVDataUnique["$_.'User Name'\$_.'Computer Name'"]++ 
} 
0

您可以创建一个自定义属性与您的Select-Object。所以你已经非常接近了。试试这个:

Select-Object @{Label = "Index"; Expression = {"$($_.'User Name') $($_.'Computer Name')"} } -Unique 

它基本上将两个字段组合成一个字符串,并对其进行排序。我称之为“索引”字段,但它可以被称为任何东西。

1

您可以通过多个属性使用Group-Object到组:

$Uniqs = $csvData | Group -Property "USER NAME","COMPUTER NAME" -NoElement | Select -Expand Name 
5

非常相似,Mathias的答案,但将所有输出列:

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