1ToDo/Get-UnAssignedDevices.ps1

<#
 
.COPYRIGHT
Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
See https://github.com/microsoftgraph/powershell-intune-samples/blob/master/LICENSE for license information.
 
#>


Function Get-UnAssignedDevice() {
    
        <#
    .SYNOPSIS
    This function is used to get all un-assigned bulk devices using the Graph API REST interface
    .DESCRIPTION
    The function connects to the Graph API Interface and gets all un-assigned bulk devices
    .EXAMPLE
    Get-UnAssignedDevice
    Gets all un-assigned bulk devices
    .NOTES
    NAME: Get-UnAssignedDevice
    #>

    
        [cmdletbinding()]
    
        param
        (
        )
    
        $graphApiVersion = "Beta"
        $ResourceSegment = "deviceManagement/importedAppleDeviceIdentities?`$filter=discoverySource eq 'deviceEnrollmentProgram'"
    
        try {
    
            [System.String]$devicesNextLink = ''
            [System.String[]]$unAssignedDevices = @()
            [System.Uri]$uri = "https://graph.microsoft.com/$graphApiVersion/$($ResourceSegment)"
    
            DO {
                $response = Invoke-RestMethod -Uri $uri -Headers $authToken -Method Get -ContentType "application/json"
                $devicesNextLink = $response."@odata.nextLink"
                $uri = $devicesNextLink
    
                foreach ($device in $response.value) {
                    write-host "SerialNumber: " $device.SerialNumber "RequestedEnrollmentProfileId: " $device.RequestedEnrollmentProfileId "`n"
    
                    if ([string]::IsNullOrEmpty($device.RequestedEnrollmentProfileId)) {
                        $unAssignedDevices += $device.SerialNumber
                    }
    
                    if ($unAssignedDevices.Count -ge 1000) {
                        $devicesNextLink = ''
                        break
                    }
                }
            }While (![string]::IsNullOrEmpty($devicesNextLink))
    
            Write-Host $unAssignedDevices -f Yellow
    
            return $unAssignedDevices
        }
    
        catch {
    
            
            $ex = $_.Exception
            $errorResponse = $ex.Response.GetResponseStream()
            $reader = New-Object System.IO.StreamReader($errorResponse)
            $reader.BaseStream.Position = 0
            $reader.DiscardBufferedData()
            $responseBody = $reader.ReadToEnd();
            Write-Host "Response content:`n$responseBody" -f Red
            Write-Error "Request to $Uri failed with HTTP Status $($ex.Response.StatusCode) $($ex.Response.StatusDescription)"
            
            break
    
        }
    
    }