2016-04-24 56 views
-1

我有+100行的AD安全組,其中每個集合可能包含3-7個需要作爲成員添加的安全組。使用PowerShell將安全組導入嵌套

我將這些數據分解爲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 
+0

請提供更多信息。有兩個CSV?如果沒有,那麼你已經給出了csv第一行如何和什麼元素鏈接到的例子? –

+0

@AmanSharma只有1個CSV。使用上面的CSV示例,單元格A1將是MainGroup,A2將是Group002,A3將是Group003。 – vXE

回答

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. 
    } 
    

然而,使用當前的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 } 
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 

    } 
}