Powershell Pull AD组和子组死循环

Powershell Pull AD Group and Subgroup Endless Loop

我的脚本正在访问活动目录以拉取 AD 组及其子组。

我将 Get-ADGroupMember Where-Object { $_.ObjectClass -eq "user" }) 添加到脚本中,但现在脚本 运行 没完没了。

我检查了CSV文件,数据正在被推入其中,我只是不知道为什么这是无休止的运行ning。

我对 Powershell 还是个新手,可能忽略了一些东西。

我需要添加某种 catchexit 吗?我读到 exit 在循环完全执行之前关闭循环。

我的脚本:

Clear-Host

#Import-Module ActiveDirectory

Write-Host -ForegroundColor Green "Starting" 

$logfile = "C:\temp\logfile.csv"
"Domains,Groups,Nested" | Add-Content $logfile

$grp_list = Import-Csv "C:\temp\Copy_lp.csv"
$domains = @()    
$dom = Import-Csv "C:\temp\Copy_lp.csv" |
    Select-Object -Unique -ExpandProperty "Domain Group"

foreach ($domain in $dom) {
    $domains += $domain.Split('\')[0]
}

$domains = $domains | Select-Object -Unique

foreach ($domain in $domains) {

    Write-Host "Domain:" $domain
    Get-ADGroup -Filter * -Server $domain |

    ForEach-Object {
        $group = $_.Name

        $grps = (Get-ADGroupMember $group -Server $domain |
            Where-Object { $_.ObjectClass -eq "Group" })

        $grps | ForEach {
            Write-Host "Group: " $_.Name 
            "$domain,$($_.Name),$group" | Add-Content $logfile
        }
    }
}

Write-Host -ForegroundColor Green "Done"

更新 Tomer 回答了这个问题。我从之前执行的脚本中获取了输出 CSV,该脚本被执行以查看数据库级别的用户权限。所以当一个用户被映射到实例内的多个数据库(用户也属于不同的组和子组)并且会出现很多次。因此,当我的脚本遍历列表时,它会一遍又一遍地重新 运行 相同的广告组。我仍然不明白为什么它会连续 运行 但是一旦我将 CSV 文件更改为只有一个域列表,它就会执行并吐出我正在寻找的输出。我没有把这个作为答案,因为我觉得托默应得的荣誉。谢谢大家的帮助。

在 Active Directory 中,允许成员自循环。因此,例如,A 组可能包含另一个 B 组,B 组可能再次包含 A 组。因此,成员关系的简单枚举会导致死循环。

解决它的一个简单方法是存储您已经看到的 DN,并且不再重复它们。