Skip to content

Report stale registered devices that haven't been used for sign-in recently.

Permissions

Requires delegated permission Device.Read.All.

View source

from datetime import datetime, timedelta, timezone

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


def main():
    client = GraphClient(tenant=tenant).with_client_secret(client_id, client_secret)

    cutoff = datetime.now(timezone.utc) - timedelta(days=180)
    stale = []

    for device in client.devices.get().execute_query():
        last = device.approximate_last_signin_datetime
        if last and last < cutoff:
            stale.append(
                (
                    device.display_name or "Unnamed",
                    device.operating_system or "Unknown",
                    last,
                )
            )

    stale.sort(key=lambda x: x[2])
    print(f"Stale devices (180+ days): {len(stale)}")
    for name, os, last in stale:
        print(f"  {name}  {os}  {last.date()}")


if __name__ == "__main__":
    main()

← Back to Devices