Aug 25 2021 03:52 AM
HI Team,
We are using the below PowerShell script to change the Primary user of a device by checking the last logged in userid.
Below is the github repo link which holds this PowerShell script and also the link of an article about the explanation of this script -
The problem now is that we are only able to get 1000 devices in the $Devices variable in the above mentioned script and we have around 2000 devices so 1000 more devices are not getting fetched by this script.
Also this script always get the device in the same pattern i.e.. if I run the script today and tomorrow then the devices will show the same pattern that is also the reason the rest 1000 devices are not getting fetched.
Any solution to this issue will be a great help for me.
Regards,
Ashish Arya
Aug 25 2021 04:22 AM
Solution@Ashish_Arya This script indeed does not add "paging" to retrieve additional devices if they exist. This is evident because it uses the "Get-Win10IntuneManagedDevice" function inside the script, which only does one call to the Graph API endpoint. You could potentially modify this function to do paging, on the other hand, there's a Graph PowerShell module nowadays which could potentially be used to replace parts of this script's custom code with simpler out of the box cmdlets.
The code responsible for only returning a subset is this:
else {
$Resource = "deviceManagement/managedDevices?`$filter=(((deviceType%20eq%20%27desktop%27)%20or%20(deviceType%20eq%20%27windowsRT%27)%20or%20(deviceType%20eq%20%27winEmbedded%27)%20or%20(deviceType%20eq%20%27surfaceHub%27)))"
$uri = "https://graph.microsoft.com/$graphApiVersion/$($Resource)"
(Invoke-RestMethod -Uri $uri -Headers $authToken -Method Get).value
}
For more information on how paging works in Graph API, you can have a look at this URL.
Aug 30 2021 10:08 AM
@pvanberlo : Thanks a lot for your reply. I have tried modifying the script and now I am getting the other devices as well.
But can you help me in understanding what does the value mean for the $resource variable.
Aug 30 2021 10:14 AM
@Ashish_Arya That's the specific API that's being called, in this case the 'deviceManagement/managedDevices' one, which returns all managed devices in your tenant. It adds a filter, specifically to only return devices based on the 'deviceType' attribute, which must contain the value 'desktop', 'windowsRT', 'winEmbedded' or 'surfaceHub' for a device to be returned in this API call.
Sep 03 2021 12:28 AM
@pvanberlo Thank you so much for the help.
Oct 21 2021 08:47 AM
Oct 26 2021 12:25 AM
Nov 01 2021 07:14 AM
Aug 25 2023 05:16 AM
Aug 26 2023 07:30 AM
Aug 26 2023 07:31 AM
Aug 25 2021 04:22 AM
Solution@Ashish_Arya This script indeed does not add "paging" to retrieve additional devices if they exist. This is evident because it uses the "Get-Win10IntuneManagedDevice" function inside the script, which only does one call to the Graph API endpoint. You could potentially modify this function to do paging, on the other hand, there's a Graph PowerShell module nowadays which could potentially be used to replace parts of this script's custom code with simpler out of the box cmdlets.
The code responsible for only returning a subset is this:
else {
$Resource = "deviceManagement/managedDevices?`$filter=(((deviceType%20eq%20%27desktop%27)%20or%20(deviceType%20eq%20%27windowsRT%27)%20or%20(deviceType%20eq%20%27winEmbedded%27)%20or%20(deviceType%20eq%20%27surfaceHub%27)))"
$uri = "https://graph.microsoft.com/$graphApiVersion/$($Resource)"
(Invoke-RestMethod -Uri $uri -Headers $authToken -Method Get).value
}
For more information on how paging works in Graph API, you can have a look at this URL.