如何将来自 csv 的多个组的 Get-ADGroupMember 修改为 运行,以用所述组的成员替换嵌套组

How to modify Get-ADGroupMember to run for multiple groups from csv, to replace nested groups with members of the said groups

您好,我正在尝试编写一个脚本来用所述组的成员替换嵌套组。我从 https://community.spiceworks.com/topic/1816091-ad-powershell-replace-nested-groups-with-members-of-said-group 找到了一个 并修改如下。其中 #Parent_1 是 AD 通讯​​组。

$TargetGroup= '#Parent_1'
ForEach ($Member in Get-ADGroupMember -Identity $TargetGroup) {
    if ($Member.objectclass -eq 'group') {
        
        ForEach ($SubMember in Get-ADGroupMember -Identity $Member -Recursive ) {
        Add-ADGroupMember -Identity $TargetGroup -Members $SubMember.SamAccountName 
             
        }
    Remove-ADGroupMember -Identity $TargetGroup -Members $Member -Confirm:$false
  
    }
}

当用作 $TargetGroup 时,它非常适合“#Parent_1”的单个组。

但我希望 运行 使用 CSV$TargetGroup 设置多个 运行,如下所示。

而不是使用 $TargetGroup= '#Parent_1', 我希望 $TargetGroup =Import-Csv -Path 。\xx.csv

使用以下 CSV。

但它不会 运行,只是通过替换它。它只是给出错误。

修改了好几处,还是时不时抛出不同的错误,还是不行。不确定每个循环都需要另一个。

有人可以帮忙吗?任何帮助将不胜感激。


PS 回答我的问题 |最终工作代码

foreach($TargetGroup in Import-Csv -Path .\xx.csv)
{

    ForEach ($Member in Get-ADGroupMember -Identity $TargetGroup.samaccountname)
    {
        if ($Member.objectclass -eq 'group')
        {
            ForEach ($SubMember in Get-ADGroupMember -Identity $Member -Recursive)
            {
                Add-ADGroupMember -Identity $TargetGroup.samaccountname -Members $SubMember.SamAccountName 
            }
            Remove-ADGroupMember -Identity $TargetGroup.samaccountname -Members $Member -Confirm:$false
        }
    }
}

你只需要循环一个$TargetGroup at a time

foreach($TargetGroup in Import-Csv -Path .\xx.csv)
{
    ForEach ($Member in Get-ADGroupMember -Identity $TargetGroup)
    {
        if ($Member.objectclass -eq 'group')
        {
            ForEach ($SubMember in Get-ADGroupMember -Identity $Member -Recursive)
            {
                Add-ADGroupMember -Identity $TargetGroup -Members $SubMember.SamAccountName 
            }
            Remove-ADGroupMember -Identity $TargetGroup -Members $Member -Confirm:$false
        }
    }
}

@Doug 谢谢.. $TargetGroup 应该是 $TargetGroup.samaccountname 这样的内部循环..及其作品!完美。

foreach($TargetGroup in Import-Csv -Path .\xx.csv)
{

    ForEach ($Member in Get-ADGroupMember -Identity $TargetGroup.samaccountname)
    {
        if ($Member.objectclass -eq 'group')
        {
            ForEach ($SubMember in Get-ADGroupMember -Identity $Member -Recursive)
            {
                Add-ADGroupMember -Identity $TargetGroup.samaccountname -Members $SubMember.SamAccountName 
            }
            Remove-ADGroupMember -Identity $TargetGroup.samaccountname -Members $Member -Confirm:$false
        }
    }
}