2016-04-24 7 views
-1

各コレクションにメンバーとして追加する必要のあるセキュリティグループが3〜7個あるADセキュリティグループが+100行あります。PowerShellを使用してセキュリティグループをネストする(Add-ADGroupMember)

このデータはCSVで分割されていますが、これまでのところImport-CSVコマンドレットを使用してデータを処理することはできませんでした。

これまでのところ、私は単純に+100のエントリを作成しましたが、CSVをインポートすることでどのように対処できるかを確認したいと思います。

私はここで他のCSVに関する質問を読んでいて、私のパワーシェルの本の一部を再読しましたが、これまでのところ適切な解決策が得られませんでした。

CSVインサイド
$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' 

MainGroup SecondGroup ThirdGroup 
Group001 Group011  Group111 
Group002 Group022  Group222 
Group003 Group033 
+0

詳細を入力してください。 2つのCSVはありますか?そうでない場合、例のために、csvの最初の行がどのようにリンクされているのか、どの要素がリンクされていますか? –

+0

@AmanSharma CSVは1つしかありません。上の例のCSVを使用すると、セルA1はMainGroup、A2はGroup002、A3はGroup003になります。 – vXE

答えて

0
  1. Add-ADGroupMember-MainGroupというプロパティがありません、あなたは-Identity "MainGroup"を使用する必要があります。
  2. これは良いCSVファイルではありません。 CSVファイルの行は単一の項目を表し、各列はその項目を「記述する」属性でなければなりません。列の値は、同じ行の他の値とは独立しています。私はこのようにそれを書かれています:

    MembersToAdd.csv

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

    それがどこを追加する必要がある人は明らかですので、あなたはタスクごとに1行を持っているでしょうその方法。 Ex。

    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} 

あなたはどちらかchildgroupsを検証し、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 

    } 
} 
関連する問題