我的脚本正在访问活动目录以提取AD组及其子组。
我将在Get-ADGroupMember Where-Object { $_.ObjectClass -eq "user" })
中添加脚本,但现在脚本无休止地运行。
我检查了CSV文件并且正在将数据推入其中,我只是不知道为什么这种情况无休止地运行。
我仍然是Powershell的新手,可能忽视了一些事情。
我是否需要添加某种catch
或exit
?我读到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,以查看数据库级别的用户权限。因此,当用户被映射到实例中的多个数据库(用户也属于不同的组和子组)时,会出现多次。因此,当我的脚本通过列表时,它会一遍又一遍地重新运行相同的AD组。我仍然不明白为什么它会继续运行但是一旦我改变了CSV文件只有一个域列表它执行并吐出我正在寻找的输出。我没有把这个作为答案,因为我觉得Tomer值得赞扬。谢谢大家的帮助。
答案 0 :(得分:0)
在Active Directory中,允许成员资格自循环。因此,例如,组A可以包含另一组B,其可以再次包含组A.因此,关系成员的简单枚举可能导致无限循环。
解决问题的一种简单方法是存储您已经看过的DN,而不是再次检查它们。