0

我有一个广告组列表。我想检查这些组中的每一个是否都是父组的 MemberOf。如果是这样,我想列出父组。例如:子组 1 没有父组,因此它不必列出任何内容。子组 2 有 2 个父组(2 个组的成员也是如此),我想列出这 2 个组。等等...

我从一个简单的代码开始:

get-adgroup -filter "CN -eq 'Child2'" -properties memberof | select memberof

我得到的结果几乎是我想要的:


{CN=Parent1,OU=ABC,CN=Parent2,OU=ABC} 的成员

所以这行得通,尽管我不想看到“CN=”部分和“OU=”部分,只看到组名。

下一步我尝试了以下代码:

Import-Csv -Path H:\Test\Input_ADGroup.csv | 
ForEach-Object {
    $Group = Get-ADGroup -filter "CN -eq '$($_.CN)'" -properties memberof 
    [PSCustomObject]@{
        SourceCN = $_.CN
        MemberOf = $Group.memberof
    }
} | Export-Csv -Path H:\Test\Output_ADGroup.csv -NoTypeInformation

使用上面的代码时,它不能正常工作。它显示了一个包含输入组(子组)的列表,但输出组(父组)显示为: “Microsoft.ActiveDirectory.Management.ADPropertyValueCollection” 当输出包含 2 个或更多(父)组时,它以某种方式不起作用。

我尝试的另一个选项是使用该Get-ADPrincipalGroupMembership函数,但这总是给我一个错误:Get-ADPrincipalGroupMembership : The operation is not executed because the user has not been authenticated

任何人都有一些想法如何帮助我获取文件中每个 AD 组的父组?

提前致谢。

4

1 回答 1

0

下面的代码可以解决问题,尽管它需要在 Excel 中进行一些手动操作。

Import-Csv -Path H:\Powershell\Input_ADGroup.csv | 
ForEach-Object {
    $Group = Get-ADGroup -filter "CN -eq '$($_.CN)'" -properties memberof 
    [PSCustomObject]@{
        SourceCN = $_.CN
        MemberOf = $Group.MemberOf -join ";"
    }
} | Export-Csv -Path H:\Powershell\Output_ADGroup.csv -NoTypeInformation
H:\Powershell\Output_ADGroup.csv 

在 A 列中,它输出源 AD 组(子)和父组。如果有多个父组,它会输出到列 C、D、E 等。此外,输出(父组)显示为“CN=Parent1,OU=ABC...”所以我在 Excel 中使用了查找和替换选项删除 CN/OU 部分。此外,因为很多输出可以是水平的(多列),所以需要一些复制粘贴。但我确实得到了我需要的输出……所以谢谢。

于 2019-08-06T09:28:06.450 回答