На основании вашего описания вы можете зарегистрировать мультитенантное приложение в своем основном арендаторе: После создания приложения создайте для него секрет и запишите его идентификатор приложения и секрет , мы будем использовать его для подключения к вашим арендаторам позже:
Предоставьте «User.ReadWrite.All»разрешение Microsoft Graph API для этого приложения, так как мы будем называть Microsoft Graph API для удаления пользователей: Не забудьте нажать кнопку «Предоставить согласие администратора для вашего арендатора», чтобы завершить процесс назначения.
разрешение администратора других арендаторов дать согласие на использование этого приложения по ссылке:
https://login.microsoftonline.com/<your tenant ID>/adminConsent?client_id=<your multi-tenant app ID>
, и это приложение будет добавлено к другим арендаторам в качестве принципа обслуживания:, чтобы мы могли использовать это приложение для выполнения некоторых действий со всеми арендаторами.
Просто запустите приведенный ниже Powershell, чтобы удалить пользователя из всех ваших арендаторов, который я протестировал на моей стороне. и это работает для меня. Кстати, пожалуйста, удалите все роли каталога перед его запуском, иначе вы получите ошибку 403, если пользователю назначены некоторые роли администратора.
#config your multi tenant app id and secret here.
$appid = "<YOUR MULTI TENANT APP ID>"
$secret = "<YOUR MULTI TENANT APP SECRET>"
$userEmailaddress = "<EMAIL ADDRESS OF THE USER YOU WANT TO DELETE>"
#config all your tenents here
$tenants = "<TENANT 1 ID/NAME>","TENANT 2 ID/NAME",...
#check and delete user by email address in all tenants
foreach($tenant in $tenants){
#get token to call microsoft graph api to delete users
$body=@{
"grant_type"="client_credentials";
"resource"="https://graph.microsoft.com";
"client_id"=$appid;
"client_secret" = $secret
}
$result=Invoke-RestMethod -Uri "https://login.windows.net/$tenant/oauth2/token" -Method POST -Body $body
#get user object from tenant
$userguestPrefix = $userEmailaddress.Replace('@','_')
$searchURL = "https://graph.microsoft.com/v1.0/users?`$filter=startswith(userPrincipalName,'$userEmailaddress') or startswith(userPrincipalName,'$userguestPrefix')"
$searchUserResult = Invoke-RestMethod -Uri $searchURL -Method GET -Headers @{'Authorization'='Bearer '+$result.access_token}
#remove the user from tenant
if($searchUserResult.value.Length -eq 1){
echo "remove:"$searchUserResult.value[0].displayName" from tenant : $tenant"
$removeURL = "https://graph.microsoft.com/v1.0/users/" + $searchUserResult.value[0].id
Invoke-RestMethod -Uri $removeURL -Method DELETE -Headers @{'Authorization'='Bearer '+$result.access_token}
}
}
Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.