Powershell Pull AD Group和Subgroup Endless Loop

时间:2017-01-06 17:15:17

标签: powershell active-directory powershell-v2.0

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

我将在Get-ADGroupMember Where-Object { $_.ObjectClass -eq "user" })中添加脚本,但现在脚本无休止地运行。

我检查了CSV文件并且正在将数据推入其中,我只是不知道为什么这种情况无休止地运行。

我仍然是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,以查看数据库级别的用户权限。因此,当用户被映射到实例中的多个数据库(用户也属于不同的组和子组)时,会出现多次。因此,当我的脚本通过列表时,它会一遍又一遍地重新运行相同的AD组。我仍然不明白为什么它会继续运行但是一旦我改变了CSV文件只有一个域列表它执行并吐出我正在寻找的输出。我没有把这个作为答案,因为我觉得Tomer值得赞扬。谢谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

在Active Directory中,允许成员资格自循环。因此,例如,组A可以包含另一组B,其可以再次包含组A.因此,关系成员的简单枚举可能导致无限循环。

解决问题的一种简单方法是存储您已经看过的DN,而不是再次检查它们。