Проверьте, является ли пользователь ADGroup уже членом group Azure. Если нет, добавьте его в группу

#powershell #azure-active-directory

#powershell #azure-active-directory

Вопрос:

я хотел бы проверить, является ли пользователь ADGroup уже членом group Azure. Если нет, добавьте его в группу. Есть ли другой способ улучшить мой скрипт? Спасибо за ваши советы

 #connect to AzureAD module
Connect-AzureAD

$groupObjID = "0a1068c0-dbb6-4537-9db3-b48f3e31dd76"

#get a list of all members which are already in AzureAD Group:
$members=Get-AzureADGroupMember -All $true -ObjectId $groupObjID | Where-Object {$_.UserType -eq 'member'}

#get adgroupmember that will join the azgroup:
$adgroupmembers = Get-ADGroupMember -identity "test_group" | get-aduser -properties userprincipalname, name

Foreach($user in $adgroupmembers){
Try{
$usersemail = $user.Userprincipalname
$userobjectid = (Get-AzureADUser -objectid $usersemail).objectid

foreach ($newmember in $Userobjectid)
       {
         #Check if ADGroup user is already a member of group Azure.
         #if not, add it to the group
              if ($members.ObjectId -notcontains $newmember.ObjectId)
              {
                Add-AzureADGroupMember -ObjectId $groupObjID -RefObjectId $newmember.ObjectId

Write-Host User is successfully added to azuregroup!
              }
        }
}


}
 

Комментарии:

1. Ваш Azure AD не синхронизирован с предварительным Active Directory? Это должно происходить автоматически, если у вас настроено Azure AD Connect.

2. Компания только что была куплена, и они просматривают проекты. Поскольку я не администратор, я создаю небольшие скрипты, чтобы помочь себе…

Ответ №1:

Вот как я бы это сделал, следует учитывать одну вещь Add-AzureADMember : в документации отсутствуют подробности, и я не уверен, может ли -RefObjectId параметр принимать a UserPrincipalName или он должен быть an Azure ObjectId .

В случае, если это работает с UPN , это:

 $azUser = Get-AzureADUser -ObjectId $_
Add-AzureADGroupMember -ObjectId $azGroup.ObjectId -RefObjectId $azUser.ObjectId
 

Может быть изменен на:

 Add-AzureADGroupMember -ObjectId $azGroup.ObjectId -RefObjectId $_
 

Концепция очень похожа на ту, которая использовалась в вашем предыдущем вопросе, отфильтруйте UserPrincipalName массив $adMembers , чтобы найти те элементы, которые не существуют в $azMembers.UserPrincipalName массиве.

 $ErrorActionPreference = 'Stop'

$azGroupName = 'TestAzGroup'
$adGroupName = 'TestADGroup'

$azGroup = Get-AzureADGroup -Searchstring $azGroupName
$azMembers = Get-AzureADGroupmember -ObjectId $azGroup.ObjectId

# This should be an array of UserPrincipalNames
$adMembers = (Get-ADGroupMember $adGroupName).Where({
    $_.ObjectClass -eq 'user'
}).UserPrincipalName

# Get the members of $adMembers that do not exist in $azMembers
$adMembers.Where({$_ -notin $azMembers.UserPrincipalName}).ForEach({    
    try
    {
        "Attempting to add user: '$_' to Azure AD Group: '{0}'" -f $azGroup.DisplayName
        if(-not($azUser = Get-AzureADUser -ObjectId $_))
        {
            Write-Warning "Could not find '$_' on Azure AD, skipping..."
            return
        }
        Add-AzureADGroupMember -ObjectId $azGroup.ObjectId -RefObjectId $azUser.ObjectId
    }
    catch
    {
        Write-Warning $_.Exception
    }
})
 

Комментарии:

1. У меня ошибка в строке 7. $admembers = Get-AzureADGroupmember $adgroupname. Я заменил на $azgroupname, но все равно получаю сообщение об ошибке…

2. @ak2595 О боже, я плохо перепутал переменные. Повторите попытку (скопируйте и вставьте весь код снова) и обновите переменные $azGroupName and $adGroupName .

3. у меня другая ошибка… Get-AzureADGroupMember: не удается найти позиционный параметр, который принимает аргумент «class Group {

4. @ak2595 Что произойдет, если вы добавите .ObjectId вот так => $azMembers = Get-AzureADGroupmember -ObjectId $azGroup.ObjectId ?

5. большое спасибо за ваше время!