Рейтинг:0

Как добавить членов группы AAD SG в EXO DG и сравнить

флаг it

В настоящее время я занят скриптом, который должен сделать следующее:

Сценарий должен проверить группу Azure AD и сравнить мутации в EXO DG. Я написал и связал некоторые входы и выходы, но я не могу заставить их работать.У меня ноль ошибок при запуске, но удаленный пользователь из группы SG не будет удален из DG в EXO.

Почему я это делаю? У меня есть открытый вопрос, чтобы сделать группу безопасности Azure AD с поддержкой почты. К сожалению, группы безопасности Azure AD не могут быть группами с включенной поддержкой почты.

В «New-AzureADMSGroup» или «Set-AzureADMSGroup» есть объект MailEnabled, но он не поддерживается.

Имея EXO MSG, просто не удовлетворяйте потребности, потому что вы не можете использовать эту группу в пакетах доступа или корпоративных приложениях.

Наличие EXO DDL также не удовлетворяет потребности, потому что у пользователей в запрошенной группе AAD SG просто нет одинаковых критериев для фильтрации. Единственное, что объединяет пользователей, это членство в AAD SG.

#Azure AD
$AzureADGroup1 = "ххххх-ххх-хххх-хх-ххххххх"
$AzureADGroup1Members = Get-AzureADGroupMember -ObjectId $AzureADGroup1 -All $true | Почта Select-Object

#ЭКЗО
$DGMembers = (Get-distributiongroupmember -identity [email protected]).primarysmtpaddress

foreach ($AzureADGroup1Member в $AzureADGroup1Members) {
#если пользователи уже добавлены, возвращает $false
если (!($DGMembers -match $AzureADGroup1Member))
{
Add-DistributionGroupMember -Identity [email protected] -Member $AzureADGroup1Member.Mail -Confirm:$false -ErrorAction SilentlyContinue
}

Write-Host -ForegroundColor Green $AzureADGroup1Member.Mail "добавлен"

если (!($DGMembers -notmatch $AzureADGroup1Member))
{
    Remove-DistributionGroupMember -Identity [email protected] -Member $AzureADGroup1Member.Mail -Confirm:$false -ErrorAction SilentlyContinue
}

Write-Host -ForegroundColor Green $AzureADGroup1Member.Mail "удален"

}

ОБНОВИТЬ: Сейчас я сделал еще один скрипт, который не очень аккуратный.

1: Удаляет всех участников из DG

2: извлекает всех участников из AAD SG.

3: добавить всех участников обратно в DG

#EXO: Очистить DG

$ДГ = "ДГ1"

$DGMembers = (Get-distributiongroupmember -identity $DG).PrimarySmtpAddress



foreach ($DGMember в $DGMembers) {

    Remove-DistributionGroupMember -Identity $DG -Member $DGMember -Confirm:$false -ErrorAction SilentlyContinue

    Write-Host -ForegroundColor Green $DGMember "удален"

}



#Azure AD: получите AAD SG

$AzureADGroup1 = "хххх-хххх-ххх-ххх-ххх"

$AzureADGroup1Members = (Get-AzureADGroupMember -ObjectId $AzureADGroup1 -All $true).Mail



#EXO: Заполнить DG еще раз

foreach ($AzureADGroup1Member в $AzureADGroup1Members) {

    Add-DistributionGroupMember -Identity $DG -Member $AzureADGroup1Member -Confirm:$false -ErrorAction SilentlyContinue

    Write-Host -ForegroundColor Green $AzureADGroup1Member "добавлен"

    }

Ну это само по себе не проблема, только то, что в AAD SG более 1100 членов, я конечно могу запускать его в 1 час каждую ночь, но боюсь что он может быть не готов в 7 часов в долгосрочной перспективе.

Рейтинг:0
флаг it

Отвечаю на свой вопрос будущим читателям. Ключ в том, чтобы работать с функцией Compare-Object в PowerShell!

#Azure AD: получите AAD SG
$AzureADGroup = "ххх-ххх-ххх-ххх-хххх"
$AzureADGroupMembers = (Get-AzureADGroupMember -ObjectId $AzureADGroup -All $true).Mail

#EXO: Получить EXO DG
$DG = "DG1@домен.com"
$DGMembers = (Get-distributiongroupmember -identity $DG).PrimarySmtpAddress


# SideIndicator: "<=" = НЕ В EXO DG - ДОБАВИТЬ ГРУППА AAD SG В EXO DG
Compare-Object -ReferenceObject $AzureADGroupMembers -DifferenceObject $DGMembers | Where-Object {$_.SideIndicator -eq "<="} | ForEach-Object {
    Add-DistributionGroupMember -Identity $DG -Member $_.InputObject -Confirm:$false
    Write-Host -ForegroundColor Green $_.InputObject "добавлен"
}

# SideIndicator: "=>" = НЕ В AAD SG - УДАЛИТЬ ГРУППА EXO DG ИЗ AAD SG 
Compare-Object -ReferenceObject $AzureADGroupMembers -DifferenceObject $DGMembers | Where-Object {$_.SideIndicator -eq "=>"} | ForEach-Object {
    Remove-DistributionGroupMember -Identity $DG -Member $_.InputObject -Confirm:$false
    Write-Host -ForegroundColor Green $_.InputObject "удален"
}

Write-Host -ForegroundColor Зеленый "Сценарий завершен!"

Вы можете заполнить DG один раз:

#Azure AD: получение AzureADGroup1 и AzureADGroup1Members
$AzureADGroup1 = "хххх-ххх-хххх-ххх"
$AzureADGroup1Members = (Get-AzureADGroupMember -ObjectId $AzureADGroup1 -All $true).Mail

#EXO: Установите DistributionGroupMembers из AzureADGroup1Members в AzureADGroup1
foreach ($AzureADGroup1Member в $AzureADGroup1Members) {
Add-DistributionGroupMember -Identity [email protected] -Member $AzureADGroup1Member -Confirm:$false
Write-Host -ForegroundColor Green $AzureADGroup1Member "добавлен"
}

Write-Host -ForegroundColor Зеленый "Сценарий завершен!"

После однократного заполнения вы можете создать задачу автоматизации, которая будет сравнивать обе группы каждый день.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.