Functions/Find-AutopilotDevice.ps1


function Find-AutopilotDevice {
    [CmdletBinding()]
    param (
        [Parameter()]
        [ArgumentCompleter( {
                param ( $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters )
                "Virtual Machine" | ForEach-Object { "`"$_`"" } }
        )]
        [string] $Model,
        [Parameter()] [string] $DeviceName
    )

    Write-Verbose "Getting Autopilot devices"
    $AutopilotDevices = Get-AutopilotDevice
    if ($Model) {
        $AutopilotDevices = $AutopilotDevices | Where-Object model -eq $Model
    }


    Write-Verbose "Getting Azure AD Devices"
    $AzureADdevices = Get-AzureADDevice -All $true -Filter "DeviceOSType eq 'Windows'"
    if ($DeviceName) {
        $AzureADdevices = $AzureADdevices | Where-Object DisplayName -eq $DeviceName
    }

    Write-Verbose "Getting Intune Devices"
    $IntuneDevices = Get-IntuneManagedDevice -Filter "operatingSystem eq 'Windows'" | Get-MSGraphAllPages


    #$AutopilotDevices | Format-Table

    $Result = @()

    foreach ($apd in $AutopilotDevices) {

        $CurrentAzureAdDevice = $AzureADdevices | Where-Object DeviceId -eq $apd.azureAdDeviceId
        $CurrentIntuneDevice = $IntuneDevices | Where-Object id -eq $apd.managedDeviceId

        # $CurrentAzureAdDevice
        # $CurrentIntuneDevice | Format-Table

        if ($CurrentAzureAdDevice) {
            $obj = [ordered]@{
                DeviceNameAAD                     = $CurrentAzureAdDevice.DisplayName
                AutopilotGroupTag                 = $apd.groupTag
                serialNumber                      = $apd.serialNumber
                deploymentProfileAssignmentStatus = $apd.deploymentProfileAssignmentStatus
                AutopilotID                       = $apd.id
                manufacturer                      = $apd.manufacturer
                model                             = $apd.model
                UserPrincipalName                 = $CurrentIntuneDevice.userPrincipalName
                AutopilotDisplayName              = $apd.displayName
                AADApproximateLastLogonTimeStamp  = $CurrentAzureAdDevice.ApproximateLastLogonTimeStamp
                AADAccountEnabled                 = $CurrentAzureAdDevice.AccountEnabled
                IntuneenrolledDateTime            = $CurrentIntuneDevice.enrolledDateTime
                IntunelastSyncDateTime            = $CurrentIntuneDevice.lastSyncDateTime
                IntuneID                          = $CurrentIntuneDevice.id
                AzureAdID                         = $CurrentAzureAdDevice.DeviceId
                DeviceNameIntune                  = $CurrentIntuneDevice.deviceName
                skuNumber                         = $apd.skuNumber
            }

            $Result += new-object -Type Psobject -property $obj

            # Write-Verbose $obj.DeviceNameAAD
        }

    }

    $Result = $Result | Sort-Object DeviceNameAAD

    return $Result

}



<#

# Autopilot

id
deploymentProfileAssignmentStatus
deploymentProfileAssignmentDetailedStatus
deploymentProfileAssignedDateTime
groupTag
purchaseOrderIdentifier
serialNumber
productKey
manufacturer
model
enrollmentState
lastContactedDateTime
addressableUserName
userPrincipalName
resourceName
skuNumber
systemFamily
azureActiveDirectoryDeviceId
azureAdDeviceId
managedDeviceId
displayName


# Azure AD

ApproximateLastLogonTimeStamp
ComplianceExpiryTime
DeviceId
DeviceMetadata
DeviceObjectVersion
DeviceOSType
DeviceOSVersion
DevicePhysicalIds
DeviceTrustType
DirSyncEnabled
DisplayName
IsCompliant
IsManaged
LastDirSyncTime
ProfileType
SystemLabels
DeletionTimestamp
ObjectId
ObjectType
AccountEnabled
AlternativeSecurityIds
ApproximateLastLogonTimeStamp
ComplianceExpiryTime
DeviceId
DeviceMetadata
DeviceObjectVersion
DeviceOSType
DeviceOSVersion
DevicePhysicalIds
DeviceTrustType
DirSyncEnabled
DisplayName
IsCompliant
IsManaged
LastDirSyncTime
ProfileType
SystemLabels



# Intune

id
userId
deviceName
managedDeviceOwnerType
enrolledDateTime
lastSyncDateTime
operatingSystem
complianceState
jailBroken
managementAgent
osVersion
easActivated
easDeviceId
easActivationDateTime
azureADRegistered
deviceEnrollmentType
activationLockBypassCode
emailAddress
deviceRegistrationState
deviceCategoryDisplayName
isSupervised
exchangeLastSuccessfulSyncDateTime
exchangeAccessState
exchangeAccessStateReason
remoteAssistanceSessionUrl
remoteAssistanceSessionErrorDetails
isEncrypted
userPrincipalName
model
manufacturer
imei
complianceGracePeriodExpirationDateTime
serialNumber
phoneNumber
androidSecurityPatchLevel
userDisplayName
configurationManagerClientEnabledFeatures
wiFiMacAddress
deviceHealthAttestationState
subscriberCarrier
meid
totalStorageSpaceInBytes
freeStorageSpaceInBytes
managedDeviceName
partnerReportedThreatState
iccid
udid
notes
ethernetMacAddress
physicalMemoryInBytes
deviceActionResults

#>