У меня есть следующий сценарий, который дает мне необходимые данные, за исключением того, что у меня возникают проблемы с его изменением, чтобы он отображал отдельную строку для каждого члена, а не перечислял все элементы в одной ячейке. Есть идеи?

Get-ADGroup -Filter {(GroupCategory -eq "Distribution")} -Properties Name,
    Description, Location, Department, Mail, Company, Proxyaddresses, Members | 
Select-Object Name, Description, Location, Department, Mail, Company,
    @{n= "ProxyAddresses"; E = {$_.ProxyAddresses -join "; " | 
Where-Object {"ProxyAddresses -like '*'"}}}, 
    @{n='Members';e={(get-adgroupmember $_.name).name -join "; "}} |
Sort-object Name | 
Export-CSV C:\Temp\DistributionGroups.CSV -notypeinformation

Токовый выход:

current output

Желаемый выход:

desired output

0
rerhart 31 Авг 2020 в 19:49

2 ответа

Лучший ответ

Каждая строка в CSV представляет собой объект. Если вы хотите, чтобы каждый член находился в отдельной строке, вы должны вывести объект, содержащий только один член.

Get-ADGroup -Filter "GroupCategory -eq 'Distribution'" -Properties Name,Description,Location,Department,Mail,Company,Proxyaddresses | Foreach-Object {
    $Members = Get-ADGroupMember $_.SamAccountName
    if (-not $Members) {
        $Members = "" | Select-Object Name # For when there are no group members
    } 
    $ProxyAddresses = ($_.ProxyAddresses | where {$_}) -join '; '
    foreach ($Member in $Members) {
        $_ | Select-Object Name,Description,Location,Department,Mail,Company,@{n= "ProxyAddresses"; E = { $ProxyAddresses} }, @{n='Members';e={$Member.Name}}
    }
} | Sort-object Name | Export-CSV C:\Temp\DistributionGroups.CSV -notypeinformation
0
AdminOfThings 31 Авг 2020 в 18:58

Предполагая, что вы получаете необходимую информацию, как вы заявили, следующее должно работать, чтобы получить желаемый результат. Я не тестировал этот код, но он должен работать, и вы, вероятно, можете объединить все это в одну команду. Мне просто не нравится делать это во время тестирования. Слишком сложно понять, в чем проблема.

$adGroupQuery = Get-ADGroup -Filter { (GroupCategory -eq "Distribution") } `
-Properties Name,Description,Location,Department,Mail,Company,Proxyaddresses,Members | 
Select-Object Name,Description,Location,Department,Mail,Company, 
@{n= "ProxyAddresses"; E = { $_.ProxyAddresses -join "; " | Where-Object { "ProxyAddresses -like '*'" } } },
@{n='Members';e={(get-adgroupmember $_.name).name -join "; "}}

$adGroup = @()

foreach ($group in $adGroupQuery)
{
    foreach ($item in $group.Members.Split(';'))
    {
        $adGroup += [psobject]@{
            name = $group.name
            description = $group.description
            location = $group.location
            department = $group.department
            mail = $group.mail
            company = $group.company
            ProxyAddresses = $group.ProxyAddresses
            members = $item
        }
    }  
}



$adGroup | Sort-object Name | Export-CSV C:\Temp\DistributionGroups.CSV -notypeinformation
0
Patrick Mcvay 31 Авг 2020 в 17:26