Я пытаюсь создать сценарий PowerShell, который может изменять пользователей Exchange Online через Exchange Online REST API. Мне нужно установить поля Title, City, Department и Manager через API. Согласно интерактивной документации об обмене, у контактного объекта есть все обязательные поля, которые я хотел бы установить. Однако похоже, что API не позволяет мне делать изменения на пользовательском рычаге. Это немного запутанно.Изменить пользователей через Exchange Online REST Api
Если я пытаюсь получить доступ к конечной точке пользователей я получил сообщение об ошибке:
Invoke-RestMethod : {"error":{"code":"ErrorAccessDenied","message":"Access is denied. Check credentials and try again."}}
Однако я установил все разрешения для приложения в Azure Active Directory.
Вот скрипт, который я использую:
Add-Type -Path ".\Microsoft.IdentityModel.Clients.ActiveDirectory.dll";
$clientId = "<<Application Client ID>>";
$certFileFullName = "<<Path to certificate file>>";
$certFilePassword = "<<Password to certificate file>>";
$tenantId = "<<Tenant ID>>";
$authContext = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext("https://login.windows.net/$tenantId/oauth2/authorize", $false);
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 ($certFileFullName, $certFilePassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::MachineKeySet);
$clientAssertionCertificate = new-Object Microsoft.IdentityModel.Clients.ActiveDirectory.ClientAssertionCertificate($clientId, $cert);
$authenticationResult = $authContext.AcquireToken("https://outlook.office365.com", $clientAssertionCertificate);
$token = $authenticationResult.AccessToken;
$headers = @{
"Authorization" = ("Bearer {0}" -f $token);
"User-Agent" = "SyncTool/0.1PowerShell";
"client-request-id" = [System.Guid]::NewGuid().ToString();
"Date" = Get-Date -Format r;
"Accept" = "application/json";
}
Invoke-RestMethod -Method Get -Uri "https://outlook.office365.com/api/v1.0/Users" -Headers $headers;
ли кто-то сделать это с помощью Exchange Online REST API? Возможно ли это?
Как я могу разработать приложение-демон, которое использует аутентификацию AAD для приложений только для пользователей Exchange Online?
-Dmitry
С одной стороны, PowerShell не требует запятой в конце каждой строки, так что вы можете очистить свой код в этой связи в первую очередь. Единственное место, где вам нужны точки с запятой, находится в вашей хэш-таблице ($ headers @ {...}) – FoxDeploy
Я обнаружил, что MS выпустила новую документацию по API. Вы посмотрели на него? Некоторые из вашего кода, похоже, напоминают старый способ делать что-то, что было болью на клавиатуре. https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/users-operations#AssignUsersManager – FoxDeploy
Я не знаю, знаете ли вы, но есть Azure AD Module, который вы можете использовать для этих операций , Это уменьшает весь этот процесс до четырех или пяти строк кода и полностью исключает необходимость REST. – FoxDeploy