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'从集合中获取页面。以下是供您参考的图:
完美。谢谢您的帮助!对此,我真的非常感激。 – zackm