I have some code so far, but would like it to result in a table with multiple lines for users per group.
Currently, it creates a table like this:
Group | Users |
---|---|
abcgroup1 | Alice |
abcgroup1 | Bob |
abcgroup2 | Bob |
abcgroup2 | Jason |
abcgroup3 | Eve |
I would like it to instead create a table like this:
Group | Users |
---|---|
abcgroup1 | Alice Bob |
abcgroup2 | Bob Jason |
abcgroup3 | Eve |
$Groups = get-adgroup -Filter 'name -like "*abc*"'
$Results = foreach( $Group in $Groups ){
Get-ADGroupMember -Identity $Group | foreach {
[pscustomobject]@{
Group = $Group.Name
Users = $_.Name
}
}
}
$Results
$Results | Export-Csv C:\abc_search.txt -NoTypeInformation
CodePudding user response:
You can use -join
operator concatenating by CRLF `r`n
. This will result in a multiline string
:
$Groups = Get-ADGroup -Filter "name -like '*abc*'"
$Results = foreach($Group in $Groups)
{
[pscustomobject]@{
Group = $Group.Name
Members = (Get-ADGroupMember -Identity $Group).Name -join "`r`n"
}
}
$Results | Format-Table -Wrap -Autosize
$Results | Export-Csv C:\abc_search.csv -NoTypeInformation
Note that I'm using -Wrap
on Format-Table
, needed to correctly display multiline strings
on the console.
The other option you could use is Out-String
thought that would also require the use of .TrimEnd()
method to get rid of the trailing new line:
Members = ((Get-ADGroupMember -Identity $Group).Name | Out-String).TrimEnd()