mikeydk
asked on
Powershell find unique value
Powershell
I have an array of the following PSObject:
$object = New-Object -TypeName PsObject
$object | Add-Member –MemberType NoteProperty –Name firstName –Value $_.firstname
$object | Add-Member –MemberType NoteProperty –Name SSO –Value $_.CPR
$object | Add-Member –MemberType NoteProperty –Name WorkContract –Value $_.WorkContract
$object | Add-Member –MemberType NoteProperty –Name numerator –Value $_.numerator
$object | Add-Member –MemberType NoteProperty –Name entryDate –Value $_.entryDate
For example:
Firstname: John
SSO: 111111
Workcontract: 00
Enumerator: 50
EntryDate: 31-02-2008
Firstname: John
SSO: 111111
Workcontract: 02
Enumerator: 67
EntryDate: 31-02-2009
Firstname: Joe
SSO: 222222
Workcontract: 08
Enumerator: 45
EntryDate: 31-02-2001
I need to be able to return only one PSObject per SSO. (create an array only containing unique SSO)
Based on priority:
1. Workcontract: (lowest first (eg. 00)) (if equal - priority 2)
2. Enumerator: (higest number) (if equal - priority 3)
3. EntryDate: (oldest date first)
Hope I make my self clear ;)
Mike
I have an array of the following PSObject:
$object = New-Object -TypeName PsObject
$object | Add-Member –MemberType NoteProperty –Name firstName –Value $_.firstname
$object | Add-Member –MemberType NoteProperty –Name SSO –Value $_.CPR
$object | Add-Member –MemberType NoteProperty –Name WorkContract –Value $_.WorkContract
$object | Add-Member –MemberType NoteProperty –Name numerator –Value $_.numerator
$object | Add-Member –MemberType NoteProperty –Name entryDate –Value $_.entryDate
For example:
Firstname: John
SSO: 111111
Workcontract: 00
Enumerator: 50
EntryDate: 31-02-2008
Firstname: John
SSO: 111111
Workcontract: 02
Enumerator: 67
EntryDate: 31-02-2009
Firstname: Joe
SSO: 222222
Workcontract: 08
Enumerator: 45
EntryDate: 31-02-2001
I need to be able to return only one PSObject per SSO. (create an array only containing unique SSO)
Based on priority:
1. Workcontract: (lowest first (eg. 00)) (if equal - priority 2)
2. Enumerator: (higest number) (if equal - priority 3)
3. EntryDate: (oldest date first)
Hope I make my self clear ;)
Mike
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Well, how it's supposed to be sorted in this case (very old - high priority, very far in the future - low priority)?
ASKER
High priority ;)
$Objects | Group-Object -Property SSO | ForEach-Object {
$_.Group | Sort-Object -Property `
@{Expression={$_.Workcontract}; Descending=$false},
@{Expression={[UInt64]$_.Enumerator}; Descending=$true},
@{Expression={Try {[DateTime]::ParseExact($_.EntryDate, "dd'-'MM'-'yyyy", $Null)} Catch {[DateTime]::MinValue}}; Descending=$false} |
Select-Object -First 1
}
ASKER
Any cool way to ignore an error in line "@{Expression={[DateTime]:
Thanks in advance