PowerShell O365 API列表子文件夹

问题描述:

我想获取我的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" 
} 

默认情况下,在消息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