Я автоматизирую задачу в 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.
Эта часть в порядке , Я успешно добавляю пользователей в группы AD, если они входят в связанную группу AAD. У меня возникает замешательство, когда я потом хочу сделать обратное. То есть для каждого пользователя, который является частью AD 1, если они не входят ни в одну из групп AAD, связанных с этой группой, удалите их из AD 1.
Как я думал об этом. было бы создать другую хэш-таблицу, где ключом является группа AD, тогда значение представляет собой массив групп AAD, связанных с этой группой, и перебирать каждый ключ, чтобы проверить, являются ли они частью какой-либо из групп значений. Как я могу go создать эту хеш-таблицу автоматически на основе данных в исходной хеш-таблице, и как я могу затем перебирать несколько значений для одного ключа?
Может быть лучшая структура данных или метод для это то, о чем я не знаю, что могло бы упростить все это, но мои общие знания довольно ограничены. Любой совет будет оценен, спасибо.