我有+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
答案 0 :(得分:0)
-MainGroup
中没有名为Add-ADGroupMember
的媒体资源,您需要使用-Identity "MainGroup"
。这不是一个好的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 }
答案 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
}
}