【问题标题】:Import Securty Groups to Nest using PowerShell (Add-ADGroupMember)使用 PowerShell (Add-ADGroupMember) 将安全组导入 Nest
【发布时间】:2016-04-24 05:09:40
【问题描述】:

我有 +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

【问题讨论】:

  • 请提供更多信息。是否有两个 CSV?如果不是,那么对于您给出的示例,csv 中的第一行如何以及哪些元素链接到?
  • @AmanSharma 只有 1 个 CSV。使用上面的 CSV 示例,单元格 A1 为 MainGroup,A2 为 Group002,A3 为 Group003。

标签: csv powershell active-directory


【解决方案1】:
  1. Add-ADGroupMember中没有名为-MainGroup的属性,需要使用-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.
    }
    

但是,要使用当前的 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 }

【讨论】:

    【解决方案2】:

    如何做到这一点有不同的看法。 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
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      相关资源
      最近更新 更多