【发布时间】:2020-05-04 23:55:43
【问题描述】:
我在 Active Directory/Azure 中自动执行一项检查组哈希表的任务,如果它们是键(AAD 组)的成员,则将它们添加到值(AD 组)中。结构和方法基本如下:
$mappings = @{
"1 - AAD Group" = "AD 1"
"1 - Another Group" = "AD 1"
"2 - Hello" = "AD 2"
"3 - Hi" = "AD 3"
"3 - Another" = "AD 3"
"3 - Again" = "AD 3"
}
foreach ($mapping in $mappings.GetEnumerator() | Sort-Object -Property Key) {
# Get AAD and AD group names
$aadgroup = $mapping.Key
$adgroup = $mapping.Value
# Get object ID of AAD group
$objectid = (Get-AzureADGroup -All $true | Where-Object {$_.DisplayName -eq $aadgroup}).ObjectId
# Get members of AAD group
$members = Get-AzureADGroupMember -All $true -ObjectId $objectid
# Check if each member is part of the corresponding AD group
foreach ($member in $members) {
$username = $member.MailNickName
$groups = (Get-ADUser -Identity $username -Properties MemberOf).MemberOf
if (!($groups -match $adgroup)) {
# User is not a member of the AD group, so add to group
Add-ADGroupMember -Identity "$adgroup" -Members $username
}
}
}
每个 AAD 组链接到一个 AD 组,但一个 AD 组可能链接到多个 AAD 组。
这部分很好,如果用户在关联的 AAD 组中,我会成功将用户添加到 AD 组。当我想在之后做相反的事情时,我的困惑就出现了。也就是说,对于属于 AD 1 的每个用户,如果他们不在与该组关联的任何 AAD 组中,则将其从 AD 1 中删除。
我想到的方法是创建另一个哈希表,其中键是 AD 组,然后值是与该组关联的 AAD 组数组,并遍历每个键以检查它们是否'重新成为任何价值组的一部分。如何根据原始哈希表中的数据自动创建该哈希表,然后如何遍历单个键的多个值?
可能有更好的数据结构或方法,我不知道这会使整个事情变得更容易,但我的整体知识非常有限。任何建议将不胜感激,谢谢。
【问题讨论】:
-
谢谢@Theo,明白了!
标签: powershell active-directory hashtable