#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. большое спасибо за ваше время!