我試圖製作一個PowerShell腳本,可以通過Exchange Online REST API修改Exchange Online用戶。我需要通過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?它甚至有可能嗎?
我該如何開發一個守護進程應用程序,它使用App-Only AAD身份驗證來管理Exchange Online用戶?
-Dmitry
其一,PowerShell不會在每行的結尾需要分號,所以你可以在這方面的清理你的代碼第一。唯一需要分號的地方就在你的散列表中($ headers @ {...}) – FoxDeploy
我發現MS已經發布了一些新的API文檔。你看過嗎?你的一些代碼似乎讓人想起了舊事物的做法,這在鍵盤上完全是一種痛苦。 https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/users-operations#AssignUsersManager – FoxDeploy
我不知道你是否知道,但有一個Azure AD模塊可用於這些操作。這將整個過程減少到四到五行代碼,並且完全不需要REST。 – FoxDeploy