2016-06-09 72 views
0

我想獲取我的O365 Outlook帳戶中特定文件夾中的所有子文件夾的列表。到目前爲止,我有以下腳本,我在其中顯式輸入父文件夾標識並在子文件夾上運行查詢。它正在工作,但只有當我期望看到大約80個文件夾時才返回前10個結果。PowerShell O365 API列表子文件夾

有關返回所有子項目的任何建議,將不勝感激!謝謝。

$username = "<[email protected]>" 
$password = "<password here>" | convertto-securestring -AsPlainText -Force 
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password 

$parentID = "AAMkAGMyMmFhMWY4LThjYjYtNGUzZS1hYTUxLWIxZGU1ZGRkMjIzMwAuAAAAAABqWqwE0q0sRaLyviyai0vAAQCJ2HjgFyYWQrD2lnZOADX0AAHwCF4IAAA=" 

$apiURL = "https://outlook.office365.com/api/v1.0/me/folders/$($parentID)/childfolders?top=500" 

$query = Invoke-RestMethod -Uri $apiURL -Credential $cred | ForEach-Object{$_.Value} 

$folders = $query | Select-Object -Property DisplayName 

$results = foreach($folder in $folders){ 
    $DisplayName = $folder.DisplayName 

    Write-Host "CLIENT: $DisplayName" 
} 

回答

1

默認情況下,在消息ChildFolders屬性,集合,或CalendarView返回十個條目(最多50個)的GET請求。您可以通過使用$ top查詢參數來設置最大數量來更改此行爲。

這裏是demostarte通過使用「@ odata.nextLink」得到從收集的所有數據的例子:

$accessToken='' 
$apiURL='https://outlook.office.com/api/v1.0/me/folders?$select=displayname&$top=2' 


do{ 

$query=invoke-restmethod -Uri $apiURL -Headers @{Authorization=("bearer {0}" -f $accessToken)} 
$values =$query| ForEach-Object{$_.Value} 
$nextLink= $query | Select-Object -Property '@odata.nextlink' 

$folders = $values | Select-Object -Property DisplayName 

$results = foreach($folder in $folders){ 
    $DisplayName = $folder.DisplayName 

    Write-Host "CLIENT: $DisplayName" 
} 
if($nextLink.'@odata.nextLink'){ 
    $apiURL=$nextLink.'@odata.nextLink'.ToString() 
} 


}while($nextLink.'@odata.nextLink') 

如果你跟蹤與「NEXTLINK」的要求,你會發現下一個鏈接的模式使用'skip'和'top'從集合中獲取頁面。以下是供您參考的圖: enter image description here

+0

完美。謝謝您的幫助!對此,我真的非常感激。 – zackm

相關問題