使用PowerShell将Securty组导入嵌套(Add-ADGroupMember)

时间:2016-04-24 05:09:41

标签: csv powershell active-directory

我有+100行AD安全组,其中每个集合可能包含需要添加为成员的3-7个安全组。

我将这些数据分解为CSV格式,但到目前为止,我还无法使用Import-CSV cmdlet处理数据。

到目前为止,我已经创建了如下所述的+100条目,但我想看看如何通过导入CSV来解决这个问题。

我已经在这里阅读了其他CSV问题并重新阅读了我的一些PowerShell书籍,但到目前为止还没有任何内容可以导致正确的解决方案。

$DCName = DC01
Add-ADGroupMember -Server $DCName -MainGroup -Members 'Group001', 'Group002', 'Group003' 
Add-ADGroupMember -Server $DCName -SecondGroup -Members 'Group011', 'Group022', 'Group033'
Add-ADGroupMember -Server $DCName -ThirdGroup -Members 'Group111', 'Group222'

CSV内:

MainGroup   SecondGroup   ThirdGroup
Group001    Group011      Group111
Group002    Group022      Group222
Group003    Group033

2 个答案:

答案 0 :(得分:0)

  1. -MainGroup中没有名为Add-ADGroupMember的媒体资源,您需要使用-Identity "MainGroup"
  2. 这不是一个好的CSV文件。 CSV文件中的一行应代表单个项目,每列应该是一个"描述"那个项目。您的列值独立于同一行上的其他值。我会这样写的:

    MembersToAdd.csv

    Group,Member
    MainGroup,Group001
    MainGroup,Group002
    SecondGroup,Group011
    SecondGroup,Group022
    

    这样你每个任务就有1行,所以很清楚谁应该添加到哪里。实施例

    Import-CSV MembersToAdd.csv | Foreach-Object {
        Write-Host "Add $($_.Member) to $($_.Group)"
        Add-ADGroupMember -Identity $_.Group -Members $_.Member
    
        #Or you could have added all members to an array, used `Group-Object Group` or 
        #something else to collect all members an do a single `Add-ADGroupMember` call for that group.
    }
    
  3. 但是,要使用当前的CSV,您可以尝试以下方法:

    $DCName = "DC01"
    
    #Hashtable to store group = members values
    $AddMembers = @{}
    
    Import-CSV -Path mygrouplist.csv | ForEach-Object {
        #Foreach property (column)
        $_.psobject.Properties | ForEach-Object {
    
            #If property has value
            if($_.Value) {
    
                #If new "maingroup", create hashtable entry with an array to store values in
                if($AddMembers.ContainsKey($_.Name) -eq $false) { $AddMembers.Add($_.Name,@()) }
    
                #Add member to group in hashtable
                $AddMembers[$_.Name] += $_.Value
            }
        }
    }
    
    #Foreach entry (group) in hashtable, add members
    $AddMembers.GetEnumerator() | ForEach-Object { Add-ADGroupMember -Server $DCName -Identity $_.Name -Members $_.Value }
    

答案 1 :(得分:0)

如何做到这一点有不同的看法。 CSV文件中的当前格式不是很容易使用。我建议您在使用之前格式化数据。

Name                           Value
----                           -----
MainGroup                      Group002
ChildGroups                    {Group022, Group222}

使用Add-ADGroupMember时,您可以验证子组并使用多个成员。或者你可以循环使用它们。

$csvfile = Import-Csv csv.csv
foreach ($group in $csvfile)
{
    $group | Out-Host
    $formated = @{
        MainGroup = $group.MainGroup
        ChildGroups = ($group.secondgroup, $group.thirdgroup)

    }
    $formated | Out-Host #Formated hash table
    foreach ($group in $formated)
    {
        $maingroup = $group.Maingroup
        $childgroup = $group.childgroups
        Write-Host "Main: $maingroup"
        Write-Host "Child: $childgroup"
        Add-ADGroupMember -identity $maingroup -Members $childgroup

    }
}