Search code examples
arraysexportoutputpowershell-3.0

Export specific output from an array


I have the below code that displays all groups that users which have a SamAccountName starting with 'X' are members of, and that exports the output in a CSV file:

Get-ADUser -Filter {SamAccountName -like "X*"} -Properties memberof |
    Select name, @{N="MemberOf";E={$_.memberof -join ";"}} |
    Export-Csv "C:\Users\chicken\Desktop\export_powershell\extract_test.csv" 

The code works fine, but I have some problems with the output. Indeed it returns all groups that users are members of, but I only need to export one specific group (the group that starts by 'G-ORG') for each user.

How can I filter the output to only have groups that start with 'G-ORG' for each user?

Example output:

User1,"CN=YVD_Access; CN=Proxy_ACCESS_GD; CN=RVH_BIS HSBC; CN=G-ORG-MULTI-CANAL-APPLICATION; CN=......"
USER2,"CN=G-ORG-ARCHI; CN=Proj_X; CN=Proj_X; CN=X_REF; CN=......"
USER3,"CN=HAV_SH; CN=G-ORG-IT; CN=EPH; CN=......"
USER...

Required output:

User1,"CN=G-ORG-MULTI-CANAL-APPLICATION"
USER2,"CN=G-ORG-ARCHI"
USER3,"CN=G-ORG-IT;"
USER...

Solution

  • Simply filter the member list for distinguished names that begin with CN=G-ORG- instead of joining all of them:

    $_.memberof | Where-Object { $_.StartsWith('CN=G-ORG-') }
    

    If there could be more than one match you can then either join the results

    ($_.memberof | Where-Object {...}) -join ';'
    

    or select one of them (e.g. the first)

    $_.memberof | Where-Object {...} | Select-Object -First 1
    

    depending on the requirements.