首页 > 解决方案 > Powershell 组成员资格 - 按 OU 过滤

问题描述

我想查看OU A并仅获取每个组中的成员OU B

我的脚本得到了我想要的信息,但它们都在一个列表中,没有按组分解,这使得它毫无用处。

理想情况下,我想导出到 Excel,其中 A 列具有组名(不是 DN),B 列具有组成员。

我很感激任何帮助。请参阅下文了解我已经拥有的内容:

$DNs = Get-ADGroup -Filter * -SearchBase "OU A" | ForEach { $_.DistinguishedName }
ForEach ($i in $DNs) {
    Get-ADComputer -Filter {memberof -eq $i} -SearchBase "OU B" | Select-Object Name
}

标签: powershellactive-directory

解决方案


我能够在我的环境中完成这项工作,因此它应该在您的环境中进行一些必要的更改。如果您有任何问题,请告诉我,我会为您提供帮助。

获取给定组 A 和 B 中的 AD 用户: $ADGroups = Get-ADGroup -filter * -SearchBase "OU=A,DC=zone,DC=domain,DC=com" $report = @() Foreach ($分组 ($ADGroups | ? { $_.DistinguishedName -like " OU=B " })) { try{ $members = Get-ADGroupMember -identity $group.Name $object = [pscustomobject]@{ GroupName = $group.姓名; GroupMembers = "$($members.name -join ";")"; } $report += $object } catch { Write-Host "无法找到 AD 组成员" } }

$report | Export-CSV -NoTypeInformation -Path "C:\Temp\Test.csv"

要从 A 和 B 中的 ADGroups 获取 B 中的 ADComputers:

$ADGroups = Get-ADGroup -filter * -SearchBase "OU=A,DC=zone,DC=domain,DC=com"
$report = @()
Foreach ($Group in ($ADGroups | ? { $_.DistinguishedName -like "*OU=B*" }))
{
    try{
        <#
        $members = Get-ADGroupMember -identity $group.Name
        #>
        $members = -Filter * -Property MemberOf -SearchBase "OU=B,DC=zone,DC=domain,DC=com" | Where-Object { $_.memberOf -like "*$($group.name)*" }
        $object = [pscustomobject]@{
            GroupName = $group.Name; 
            GroupMembers = "$($members.name -join ";")";
        }
        $report += $object
    }
    catch 
    {
        Write-Host "Unable to find AD Group Members"
    }
}

$report | Export-CSV -NoTypeInformation -Path "C:\Temp\Test.csv"

第二个条件有效,但我在自己的网络中没有针对我正在执行的有限搜索的结果。试一试,我们可以根据需要进行调整。


推荐阅读