Skip to content

Device hardware inventory: OS, manufacturer, model, storage, and enrollment.

Goes beyond device names — surfaces the hardware detail admins need for refresh, support, and audit decisions.

Permissions

Requires delegated permission DeviceManagementManagedDevices.Read.All.

Reference

View source

from office365.graph_client import GraphClient
from tests.settings import client_id, client_secret, tenant


def _gib(value) -> str:
    return f"{value / (1024**3):.1f} GiB" if value else "?"


client = (
    GraphClient(tenant=tenant)
    .with_client_secret(client_id, client_secret)
    .require_application_permission(
        "DeviceManagementManagedDevices.Read.All", "DeviceManagementManagedDevices.ReadWrite.All"
    )
)
devices = client.device_management.managed_devices.get().execute_query()
print(f"Found {len(devices)} managed devices\n")

for d in devices:
    print(f"{d.device_name or '(unnamed)':30s}  [{d.compliance_state or 'unknown'}]")
    print(f"    OS: {d.operating_system or '?'} {d.os_version or ''}".rstrip())
    print(f"    Hardware: {d.manufacturer or '?'} {d.model or ''}".rstrip())
    print(f"    Serial: {d.serial_number or '?'}  IMEI: {d.imei or '?'}")
    print(
        f"    Memory: {_gib(d.physical_memory_in_bytes)}  "
        f"Storage: {_gib(d.total_storage_space_in_bytes)} (free {_gib(d.free_storage_space_in_bytes)})"
    )
    print(f"    Enrolled: {d.enrolled_date_time or '?'}  Last sync: {d.last_sync_date_time or '?'}")
    print()

← Back to Managed Devices