Is there a way to sort the values of a non-normalized, multi-valued attribute from AD so that they appear in the same Order?
I am running a query in AD using get-aduser. One of the attributes I am returning is a multi-valued attribute. It seems there is no particular order that values are input into this attribute. I am exporting all returned results into a CSV file then open in Excel for some further manipulation. The multi-valued attribute is converted “Text to columns” using the delaminated “,” separator. When this is done I can see a multitude of combinations of order for the values. Example:
Possible values are: W X Y and Z
Combinations may be: “X W Z Y” , “X Z W Y” , “Z Y X” , “Z” , “Y X” , etc.
I would like to perform my search, then -expandproperty on the multi-valued attribute and sort the results so that all values of W, X,Y, X are in the same order. When I run text to columns in excel it will be easier to filter.
Just reread your question, you may need to change the split operator depending on your delimiter (space).
[pre]@{Label=‘Affiliation’;Expression={$PSItem.extensionAttribute4 -split " " | Sort-Object}}[/pre]
The sorting works but the output to csv falls short in the resulting CSV file. For instance, when an identity has 3 of the possible 5 values. (Not all identities have all possible values) Column 1, once the attributed is sorted, has a vast majority of “W” values. But in the case where an Identity does not contain a “W” value, the first sorted value for that identity is placed in column 1 and that may be “Y”. So I am thinking that if I can say something to the effect of IF value=W THEN put in column 1 > ELSE IF value=x THEN put in column 2, and so on…
Does that make sense? BTW: sorry for not posting the code as code in original post.
I am sure there is a better way to do this (this isn’t scalable), but this worked for the small sample.
Hope it helps!
[pre]
$users = ‘crews2’,‘stah06’ | Get-ADUser -Properties extensionAttribute2 |
Select-Object name, @{N=‘Affiliation’;E={$PSItem.extensionAttribute2 -split " " | Sort-Object}}
$final = @()
foreach ($user in $users) {
$final+= [psCustomObject]@{
Name = $user.Name
Case1 = foreach ($aff in $user.Affiliation) { if ($aff -eq ‘ABC’) {‘ABC’}}
Case2 = foreach ($aff in $user.Affiliation) { if ($aff -eq ‘ACB’) {‘ACB’}}
Case3 = foreach ($aff in $user.Affiliation) { if ($aff -eq ‘BAC’) {‘BAC’}}
Case4 = foreach ($aff in $user.Affiliation) { if ($aff -eq ‘BCA’) {‘BCA’}}
Case5 = foreach ($aff in $user.Affiliation) { if ($aff -eq ‘CAB’) {‘CAB’}}
Case6 = foreach ($aff in $user.Affiliation) { if ($aff -eq ‘CBA’) {‘CBA’}}
}
}
$final | FT -AutoSize [/pre]
[pre]
Name Case1 Case2 Case3 Case4 Case5 Case6