0

我試圖製作一個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

+0

其一,PowerShell不會在每行的結尾需要分號,所以你可以在這方面的清理你的代碼第一。唯一需要分號的地方就在你的散列表中($ headers @ {...}) – FoxDeploy

+0

我發現MS已經發布了一些新的API文檔。你看過嗎?你的一些代碼似乎讓人想起了舊事物的做法,這在鍵盤上完全是一種痛苦。 https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/users-operations#AssignUsersManager – FoxDeploy

+0

我不知道你是否知道,但有一個Azure AD模塊可用於這些操作。這將整個過程減少到四到五行代碼,並且完全不需要REST。 – FoxDeploy

回答

1

以下是使用PowerShell模塊簡單方法攻擊此問題的方法。由於您已經可以訪問功能強大且功能全面的PowerShell工具,因此根據我的經驗,實際上沒有理由通過REST API手動執行此操作。

使用MSONline模塊

我們可以通過使用此模塊

  • 首先,您需要設置除外經理做的一切,安裝MSOnline模塊。
  • 接下來,用自己的憑據替換第3行和第4行的信息。

    import-module MSOnline 
    
    $secpasswd = ConvertTo-SecureString '[email protected]!' -AsPlainText -Force 
    $credGuest = New-Object System.Management.Automation.PSCredential ('[email protected]', $secpasswd) 
    
    
    connect-msolservice -credential $credGuest 
    
    Get-MsolUser | ? DisplayName -eq 'JSamson' | 
    Set-MsolUser -Department 'Ham Research Team' -Title "Lead Pork Architect" -City "Hamburg" 
    
    Get-MsolUser | ? DisplayName -eq 'JSamson' | Select *Name,Title,City,Depar* | fl 
    
    
    
    DisplayName  : JSamson 
    FirstName   : Joe 
    LastName   : Sampson 
    SignInName  : [email protected] 
    UserPrincipalName : [email protected] 
    Title    : Lead Pork Architect 
    City    : Hamburg 
    Department  : Ham Research Team 
    

設置管理器屬性

原來的經理屬性不是從這個模塊進行訪問。不知道爲什麼是這樣的情況。我正在爲你製作這件作品的解決方案,並在完成後更新這個答案。


當沒有路,使自己的

集成了一些關於這個博客帖子http://goodworkaround.com/node/73馬呂斯索爾巴肯Mellum發現精彩的提示,我們有基礎連接到Azure的AD。接下來,使用Azure AD Graph DLL中提供的美妙API(您可以使用nuget命令'。\ nuget.exe安裝Microsoft.IdentityModel.Clients.ActiveDirectory'和Azure AD Rest API參考指南獲取它,這組功能已建成。

此工具包含許多工作者函數,如Get-MSOLGraphUser和Get-MsSOLGraphUserManager。它們主要設計爲由Set-MSOLGraphUserManager cmdlet本身使用,但您可以隨意修改並將它們用於您的內容。

New versions of this project will live in GitHub at this url

例子:

Set-MSOLGraphUserManager -targetUser Test -targetManager Stephen 
>Successfully found user to modify PSTest 
>Successfully looked up manager Stephen Owen 
>Updating the manager 
>Verifying manager now set for PSTest 
>Getting user manager 
>PSTest's manager is now Stephen Owen           
+0

謝謝,福克斯。這種方法很好,但並不理想: 1.對於MSOL模塊,您無法更改管理器。沒有這樣的領域。要更改管理器,您應該使用Exchange Online遠程模塊。 2.我不想在遠程服務器上的PowerShell腳本中使用我的個人憑證。通過安全最佳實踐,我需要使用有限的權限創建特殊用戶。在azure中,我不能對用戶做這件事,但可以用AD應用程序做。 可能是使用資源作用域權限的幫助,但我不確定。 – PyroJoke

+0

好的,我完成了我的統一管理器設置方法,完成了一些新功能供您使用。我會更新我的帖子。欲瞭解更多信息,請這個博客帖子:http://goodworkaround.com/node/73 – FoxDeploy

+0

另外,如果你只是想下載的cmdlet,在這裏,他們是:HTTPS://github.com/1RedOne/AzureAD – FoxDeploy

1

你應該Office 365 unified API這是一個公開預覽枚舉或修改Azure中的Active Directory用戶的信息。此API處於公開預覽中,我們正在積極努力將其發佈到GA。同時,如果您需要在生產環境中配置用戶,請撥打Azure AD Graph API。這些是用於管理目錄中用戶信息的支持端點。端點https://outlook.office365.com/api允許您指定要訪問哪個用戶的郵箱,但不允許您枚舉用戶,因爲這是目錄功能。

+0

統一API不支持僅應用程序認證,是嗎? – PyroJoke

+0

不是現在,但它是在路線圖 –

相關問題