成功获得 DL 成员 - 但如何检查和列出嵌套组和成员?

问题描述

我的脚本从我的 txt 文件中列出的每个 DL 中提取成员,但有一些将安全组作为成员,我也想列出这些组中的成员。

set-adserversetting -viewentireforest $true

$groups = Get-Content -path 'C:\Users\test.txt'

$result = 
foreach ($group in $groups) {
$members = Get-distributionGroupMember -$group -ResultSize Unlimited
foreach ($user in $members) {
[PSCustomObject]@{
GroupName = $group
samAccountName = $user.samAccountName
distinguishedname = $user.distinguishedname
name = $user.name
}
}
}
$result | export-csv 'C:\Users\testing.csv' -notypeinformation

解决方法

为此您需要一个递归函数。

试试:

function Get-NestedDistributionGroupMembers {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true,ValueFromPipeline = $true)]
        [string]$Group
    )
    # Identity can be Name,Alias,DistinguishedName,CanonicalName,EmailAddress or GUID
    Get-DistributionGroupMember -Identity $Group -ResultSize Unlimited | ForEach-Object {
        if ($_.RecipientTypeDetails.Value -match "Group") {
            Get-NestedDistributionGroupMembers $_.Name
        }           
        else {
            [PSCustomObject]@{
                GroupName         = $Group
                SamAccountName    = $user.samAccountName
                DistinguishedName = $user.distinguishedName
                Name              = $user.name
            }
        }
    }
}

$groups = Get-Content -Path 'C:\Users\test.txt'
$result = foreach ($group in $groups) {
    Get-NestedDistributionGroupMembers $group
}

$result | Export-Csv -Path 'C:\Users\testing.csv' -NoTypeInformation