问题
I have an array of Objects that have 6 properties. That look like this:
$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
I want to create an array of objects where username and computer name are not duplicated. How can I get only the unique username/computername combo in powershell? Ultimately I would like to remove all duplicates and add a property 'Count' that keeps track of how many duplicates there are.
I have tried:
$csvDataUnique = $csvData | Select-Object 'User Name','Computer Name' -Unique
$csvDataUnique = $csvData | sort -Property 'User Name' | Get-Unique
回答1:
Very similar to Mathias' answer, but will have all of the columns in the output:
$csvDataUnique = $csvData |
Group-Object 'User Name','Computer Name' |
%{ $_.Group | Select 'User Name','Computer Name' -First 1} |
Sort 'User Name','Computer Name'
回答2:
You can create a custom property with your Select-Object
. So you were pretty close already. Try this:
Select-Object @{Label = "Index"; Expression = {"$($_.'User Name') $($_.'Computer Name')"} } -Unique
It basically combines the two fields into a single string and sorts unique on that. I called the field "Index" but it could be called anything.
回答3:
I usually resort to using a hash table, and joined property values for the keys for that kind of task:
$CSVDataUnique = @{}
$csvData | foreach {
$CSVDataUnique["$_.'User Name'\$_.'Computer Name'"]++
}
回答4:
You can use Group-Object
to group by multiple properties:
$Uniqs = $csvData | Group -Property "USER NAME","COMPUTER NAME" -NoElement | Select -Expand Name
回答5:
An alternative option is to use Get-Unique
.
It was quite helpful in my situation when I wanted to select objects based on a unique property without some extensive foreach-loop.
$csvData | Sort-Object 'User Name', 'Computer Name' | Get-Unique -AsString
The object needs to be sorted because Get-Unique
compares the strings adjacent to each other. Additionally, the comparison is case-sensitive.
来源:https://stackoverflow.com/questions/31343752/how-can-you-select-unique-objects-based-on-two-properties-of-an-object-in-powers