๐ฑ Recipe ยท Intune & Device Management
Investigate a User's Device Health and Performance via Intune
Diagnose slowness complaints by pulling device specs, compliance state, and installed apps from Microsoft Graph
Complexity
Intermediate
Impact
troubleshooting + device-management + helpdesk + performance + intune
Context
Why This Matters
When a user reports that their computer is slow, the fastest way to triage the issue remotely is to pull device telemetry from Intune rather than scheduling a session on the endpoint. Microsoft Graph exposes hardware specs (RAM, storage, model), OS version, encryption status, compliance/configuration policy state, last sync time, and detected apps โ everything you need to form a hypothesis before touching the device.
This recipe is designed for a common helpdesk scenario: an IT admin receives a ticket like "my laptop is crawling" and needs a structured, repeatable way to investigate without immediately dispatching a technician. Common root causes surfaced by this workflow include under-provisioned VMs, low free disk space, missing Windows updates, unencrypted drives triggering compliance churn, or a specific detected app that is known to be resource-intensive.
When to run it
- A user reports sluggish performance, freezes, or long boot times.
- You want to validate device specs against corporate hardware standards.
- You need a pre-call triage summary before engaging the user on a remote session.
- You are auditing a fleet for under-provisioned or legacy devices.
Expected Outcomes
After completing this recipe you will have:
- A confirmed inventory record for the user's device (name, model, manufacturer, enrollment date, ownership type).
- Key performance indicators: physical memory, total/free storage, OS build, last sync time.
- Security posture: BitLocker/FileVault encryption status, compliance state, configuration profile coverage.
- A list of detected apps installed on the device, useful for spotting known resource hogs or unauthorized software.
- A prioritized, actionable recommendation list (e.g. increase VM RAM, enable BitLocker, remediate compliance error) that you can paste into the ticket response.
Risks & Considerations
Gotchas
- User Experience Analytics endpoints have limited filter support. The
userExperienceAnalyticsDevicePerformanceendpoint does not accept$filter=deviceId eq '...'ordeviceNamefilters via Graph โ you must query the collection and filter client-side, or use the Intune portal's Endpoint Analytics blade for that data. - Compliance state of
compliantcan coexist with policy errors. A device may reportcomplianceState: compliantat the top level while individual policies are in anerrorstate. Always inspectdeviceCompliancePolicyStatesโ don't trust the roll-up alone. detectedAppsis paginated. Use@odata.nextLinkto enumerate all apps; on a typical Windows device you'll see 60โ200 entries.- Last sync time matters. If
lastSyncDateTimeis more than 24 hours old, the data you are seeing is stale โ trigger a sync action before drawing conclusions.
Privacy & compliance
- Detected app inventory can include personal apps on BYOD devices. Respect your organization's BYOD privacy policy when sharing this data.
- Document the investigation in your ticketing system; device inspection of a user's machine should be auditable.
Required Permissions
| Permission | Why It's Needed |
|---|---|
| User.Read.All | Resolve the user's object ID from their display name or UPN. |
| DeviceManagementManagedDevices.Read.All | Read managed device properties (RAM, storage, OS, compliance, enrollment). |
| DeviceManagementConfiguration.Read.All | Read compliance policy states and configuration profile states for the device. |
| DeviceManagementApps.Read.All | Read the list of detected apps installed on the device. |
The fastest way to get this done: just ask Dex. Copy the prompt below and paste it into your Dex conversation.
For IT Admins
Paste into Dex Pro
For End Users
How an employee would ask Dex for help
Investigate a device via the Intune admin center
Sign in to the Microsoft Intune admin center:
https://intune.microsoft.com
In the left nav, go to:
Users โ All users
Search for the affected user (e.g. Alex Wilber) and open their profile.
In the user's profile, select Devices from the left nav. Note the Device name, OS, and Last check-in for each managed device.
Click the specific device name to open its blade. Review the Overview tab for:
- Hardware model / manufacturer
- OS version
- Primary user
- Compliance state
- Last check-in
Click Hardware in the left nav of the device blade. This is the most important view for performance triage. Review:
- Total physical memory (RAM) โ flag anything below 8 GB for knowledge workers.
- Total / free storage โ flag less than 15% free.
- BitLocker / encryption status.
- Processor and architecture.
Click Device compliance to see which compliance policies are applied and their state. Look for any policy in an Error state (not just Not compliant).
Click Device configuration to see applied configuration profiles and their state.
Click Discovered apps to see the full list of installed software. Sort by size or look for known resource-intensive apps.
For deeper performance data, go to:
Reports โ Endpoint analytics โ Startup performance / Application reliability / Resource performance
Find the device by name and review startup time, crash rate, CPU and RAM spike history.
Summarize findings in the ticket and, if needed, trigger a Sync or Restart action from the top of the device blade.
Investigate a device via Microsoft Graph
Run these calls in sequence. Replace placeholder values as noted.
1. Resolve the user
GET https://graph.microsoft.com/v1.0/users?$filter=userPrincipalName eq '{user_upn}'&$select=id,displayName,userPrincipalNameCapture id from the response โ this is your {user_id}.
2. List the user's managed devices
GET https://graph.microsoft.com/v1.0/users/{user_id}/managedDevices?$select=id,deviceName,operatingSystem,complianceState,lastSyncDateTime,model,manufacturer,totalStorageSpaceInBytes,freeStorageSpaceInBytesExample response:
{
"value": [{
"id": "db25e629-e2f8-4a8e-ad4c-18d27cfa68c3",
"deviceName": "DESKTOP-PHSSKAD",
"operatingSystem": "Windows",
"complianceState": "compliant",
"lastSyncDateTime": "2026-02-21T10:37:45Z",
"model": "VMware7,1",
"totalStorageSpaceInBytes": 85248180224,
"freeStorageSpaceInBytes": 42253418496
}]
}Capture id as {device_id}.
3. Pull the full hardware/security profile (beta)
GET https://graph.microsoft.com/beta/deviceManagement/managedDevices/{device_id}?$select=id,deviceName,operatingSystem,osVersion,complianceState,lastSyncDateTime,managementAgent,model,manufacturer,enrolledDateTime,totalStorageSpaceInBytes,freeStorageSpaceInBytes,isEncrypted,managedDeviceOwnerType,deviceEnrollmentType,physicalMemoryInBytesThe physicalMemoryInBytes and isEncrypted fields are only on the /beta endpoint โ you need them.
4. Check compliance policy states
GET https://graph.microsoft.com/beta/deviceManagement/managedDevices/{device_id}/deviceCompliancePolicyStatesFlag any entry where state != "compliant". An error state often indicates a broken policy assignment or missing platform setting.
5. Check configuration profile states
GET https://graph.microsoft.com/beta/deviceManagement/managedDevices/{device_id}/deviceConfigurationStates6. Enumerate detected apps (paginated)
GET https://graph.microsoft.com/beta/deviceManagement/managedDevices/{device_id}/detectedApps?$top=50Follow @odata.nextLink to get all pages.
Interpreting the result
physicalMemoryInBytes < 8589934592(8 GB) โ likely RAM-bound on Windows 10/11.freeStorageSpaceInBytes / totalStorageSpaceInBytes < 0.15โ low disk, will slow swap and updates.isEncrypted == falseon a corporate device โ security gap, enable BitLocker.lastSyncDateTimeolder than 24h โ data may be stale; POST asyncDeviceaction.
Investigate a device with PowerShell
The Microsoft Graph PowerShell SDK wraps the Graph calls above into cmdlets. This approach is ideal when you want a reusable script you can run from a helpdesk console.
Prerequisites
# Install the SDK (one time)
Install-Module Microsoft.Graph -Scope CurrentUser
# Sign in with the required scopes
Connect-MgGraph -Scopes "User.Read.All","DeviceManagementManagedDevices.Read.All","DeviceManagementConfiguration.Read.All","DeviceManagementApps.Read.All"Walkthrough
Resolve the user from UPN or display name:
$user = Get-MgUser -Filter "userPrincipalName eq 'AlexW@contoso.com'"List their managed devices:
$devices = Get-MgUserManagedDevice -UserId $user.IdPull the full device profile from the beta endpoint (needed for
physicalMemoryInBytesandisEncrypted):$deviceDetail = Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/deviceManagement/managedDevices/$($devices[0].Id)"Check compliance and configuration states, then enumerate detected apps (handling pagination).
Apply thresholds to produce a findings summary: RAM < 8 GB, free storage < 15%, encryption off, stale sync, compliance errors.
The downloadable script below automates all of this and prints a formatted report.
Next steps