msgraph-sdk-powershell icon indicating copy to clipboard operation
msgraph-sdk-powershell copied to clipboard

Get-MgAllSite Doesn't Respect the Top Parameter

Open 12Knocksinna opened this issue 3 months ago • 1 comments

Describe the bug

I am trying to find the first site with a display name starting with A. The cmdlet ignores the Top parameter (it's also incredibly slow - debug implies that multiple HTTP requests are made to retrieve the sites) and returns all sites with a displayname starting with A.

[array]$Sites = Get-MgAllSite -filter "startsWith(displayName,'A')" -top 1 $Sites.displayName

Azure Automation Runbook Fans Alain Charnier Andy's Christmas Party ALL-IN-1 MAIL ALL-IN-1 for DOS Atlanta Restaurants Ann Conroy (GM Datacenters) All R &A Users-Everyone is Welcome Audi e-tron Drivers - Secret Car Plans All Tenant Member User Accounts Andrew's Maintenance Planners (Teamwith a

Expected behavior

The expected behavior is that the cmdlet should comply with the Top parameter and return the number of sites specified in the parameter.

How to reproduce

See above.

SDK Version

V2.30

Latest version known to work for scenario above?

No response

Known Workarounds

Use the Graph API request.

Debug output

Status Code: OK

Headers: Cache-Control : no-store, no-cache Vary : Accept-Encoding Strict-Transport-Security : max-age=31536000 request-id : 4492f3cc-5c24-4167-8b87-e06724efd3ab client-request-id : a936e6e8-ed31-42f3-9bc3-81bdedfec988 x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"North Europe","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"DU2PEPF0004582C"}} splogid : 7c82c8a1-9074-a000-4211-67c9056cbfb7 odata-version : 4.0 Date : Tue, 23 Sep 2025 09:50:03 GMT

Body: { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites", "@odata.nextLink": "https://graph.microsoft.com/v1.0/sites/microsoft.graph.getAllSites()?$top=1&$filter=startsWith(displayName%2c%27A%27)&$skiptoken=UGFnZWQ9VFJVRSZwX1RpbWVEZWxldGVkPSZwX0lEPTcwNQ", "value": [ { "createdDateTime": "2025-01-22T11:19:37Z", "id": "redmondassociates.sharepoint.com,7b8c30d5-81a2-4582-bd15-d20e5c3091f5,4f47b8eb-8301-4678-b567-e29204a42441", "name": "Azure Automation Runbook Fans", "webUrl": "https://redmondassociates.sharepoint.com/sites/Azure.Automation.Fans", "displayName": "Azure Automation Runbook Fans", "isPersonalSite": false, "siteCollection": { "hostname": "redmondassociates.sharepoint.com" }, "root": {} } ] }

Click to expand log


<Log output here>

Configuration

No response

Other information

$psversiontable

Name Value


PSVersion 7.5.3 PSEdition Core GitCommitId 7.5.3 OS Microsoft Windows 10.0.26100 Platform Win32NT PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0

12Knocksinna avatar Sep 23 '25 09:09 12Knocksinna

Thanks for raising this Tony,

The full debug output for the cmdlet does indeed show that multiple http requests are being made, with the $top of 1, so, yeah there's quite a few requests made to the server.

Interestingly I get numerous empty pages of results with the top parameter present, which makes this slower still.

However, if I omit the top parameter, I see that only a single request and response is needed to return all the matching data in my test tenant.

So, the cmdlet is respecting and passing on the top parameter. But the server has some strange behavior when it gets this parameter.

The other issue I see here it that it's following all the nextLinks provided by the server until there are no more. Given the behavior of the API this is a blessing.

This needs some deeper investigation as to why it's following the next links without the use of an -All flag

gavinbarron avatar Oct 02 '25 23:10 gavinbarron