Powershell 拉取 AD 组和子组无限循环

标签 powershell active-directory powershell-2.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"

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

最佳答案

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

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

关于Powershell 拉取 AD 组和子组无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41510761/

相关文章:

java - 使用 Java 查找简单的 Active Directory 信息

powershell - 对管道中的 Powershell 对象进行分组和排名

powershell - 使用Register-WmiEvent通知脚本何时开始执行

powershell - 使用 PowerShell 确定 Bitlocker 版本

PowerShell 2.0 以及如何处理异常?

powershell - ParseExact 和 TryParseExact 方法不接受 powershell 脚本中的多种日期格式

testing - Active Directory - 测试用户和组

c# - C#中通过TFS API修改Build过程参数

powershell - 使用本 map 片作为输入使用 Google 图片搜索的脚本

c# DirectoryEntry InvokeSet HomeDirectory 和 HomeDrive,错误