# AD Get AD user groups and sort/save

**URL:** <https://forums.powershell.org/t/ad-get-ad-user-groups-and-sort-save/1346>\
**Category:** PowerShell Help\
**Created:** [December 31, 2011, 6:30pm UTC](https://forums.powershell.org/t/ad-get-ad-user-groups-and-sort-save/1346 "2011-12-31T18:30:00Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![archives](https://avatars.discourse-cdn.com/v4/letter/a/bb73d2/32.png) [@archives](https://forums.powershell.org/u/archives)\
**Post date:** [December 31, 2011, 6:30pm UTC](https://forums.powershell.org/t/ad-get-ad-user-groups-and-sort-save/1346/1 "2011-12-31T18:30:00Z")

</div>

by j\_internet at 2013-02-26 18:33:46

> Hi,  
>   
> I am trying to do a couple simple things but my mind is not so simple 🙂  
>   
> What I am trying to accomplish is  
>   
> 1) Read from a file list of users (have to get the oneliner to work first)  
> 2) Output in CSV  
> 3) The CSV must be in SamAccountname, Name, group name (no DN just group name)  
> 4) Figured I can clean up the DN on the memberof in Excel   
>   
> Would look like this  
> 123Logon, Bob, Domain Users, Remote Access, File Share1,   
> Or even  
> 123Logon, Bob, Domain Users  
> 123Logon, Bob, Remote Access  
> 123Logon, Bob, File Share1  
> 222Logon, Sam, File Share2  
> etc  
>   
>   
> Well   
>   
> Example 1 almost gets there.   
>   
> Example 2 It works but For some reason the memberof returns "Microsoft.ActiveDirectory.Management.ADPropertyValueCollection"  
>   
> Example 3 yes I can output the wrong output of the Microsoft.ActiveDirectory.Management.ADPropertyValueCollection  
>   
>   
>   
> Example 1  
> Get-ADUser bob -property \* | Select name, SamAccountname, memberof   
>   
> Example 2  
> Get-ADUser Bob -property \* | Select-Object name, SamAccountname, Memberof | convertto-csv  
>   
> Example 3  
> Get-ADUser Bob -property \* | Select-Object name, SamAccountname, Memberof | convertto-csv | out-file c:\ps\aaa.txt  
>   
>   
>   
> I know this is formatting its the | that is thorwing me off.  
>   
> Thanks Again!

by DonJ at 2013-02-27 07:41:34

> Example 2 does that because MemberOf contains multiple values (it isn’t a "property value," it is a "property value _collection_"). CSV files aren’t intended to contain multiple values in a field; it’s a "flat" data structure, not a hierarchical one. This isn’t a formatting thing at all - it’s that users can belong to more than one group.  
>   
> Also, the contents of the MemberOf property are full DNs, not just the CN of the group. Because DNs have commas in them, they’ll mess up your CSV formatting.  
>   
> What do you want the CSV file to look like when the user is a member of more than one group (which most users are)?  
>   
> If you want something like "Name,SamAccountName,Group,Group,Group,Group" then you might do something like this:  
>   
> `Get-ADUser -Identity Bob -Property * |Select -Property Name,SamAccountName, @{name=‘MemberOf’; expression={ ($.MemberOf | ForEach { ($ -split ‘,’)[0] -replace ‘CN=’,‘’}) -join ‘,’}}`  
>   
> Pretty proud I cam up with that ;). It’ll work, but I’m farm more interested in making sure you understand _why_ it works, so ask questions if you don’t.

by DonJ at 2013-02-27 07:48:50

> Eh, I’ll explain for future generations ;). There’s a bunch of parenthetical commands and curly-bracketed expressions you have to unwind.  
>   
> I’m using a hashtable in Select-Object’s -Property list to generate a custom (or "calculated") property. The expression defines its contents.  
>   
> I’m piping the MemberOf property - which, remember, can contain multiple values - to ForEach, which will let me work with just one value at a time. Note that the whole "piping MemberOf to ForEach," and ForEach itself, is in a parenthetical expression. Let’s call in Paren1, just for reference purposes.  
>   
> Inside Paren1, for each value, I’m splitting it on the comma in the DN. This is done inside another parenthetical expression, which I’ll call Paren2.   
>   
> Paren2 will be an array; the first item in the array (index [0]) will be the "CN=Domain Users" group name. I replace the "CN=" with a blank string to get just the group name.  
>   
> The output of ForEach (that is, the result of Paren1) will be a collection of strings - but a CSV file can’t display collections. So as one last step, I join those collection elements into their own comma-separated list, using the -join operator.  
>   
> This isn’t strictly legal CSV, or at least it’s not a well-designed CSV file, but I should get you the result you were looking for.

by coderaven at 2013-02-27 07:57:35

> As a side note, if I need to export information like this that contain property value collections, I use Export-CliXML. The XML is great at holding this entire structure with no problem. Of course, the use entirely depends on where the data is headed. That is a very nice expression, I like the way you pull the name out of the DN.

by DonJ at 2013-02-27 08:01:55

> Agreed! XML is a far better way of persisting the information. Although if I’m trying to build a report, I’d do something entirely different and output a nice-looking HTML instead - you can use a similar command to construct a table column that includes the group names, one per line.

---

<div class="post-metadata">

**Author:** ![dotnVo](https://avatars.discourse-cdn.com/v4/letter/d/4af34b/32.png) [@dotnVo](https://forums.powershell.org/u/dotnVo)\
**Post date:** [May 16, 2024, 9:03pm UTC](https://forums.powershell.org/t/ad-get-ad-user-groups-and-sort-save/1346/2 "2024-05-16T21:03:48Z")

</div>

Closed on May 16, 2024, 9:03pm UTC


