en-US/about_LicenseMeterScan.help.txt

TOPIC
    about_LicenseMeterScan

SHORT DESCRIPTION
    Free, read-only Microsoft 365 license-waste scanner that runs locally in
    your own tenant.

LONG DESCRIPTION
    LicenseMeter Scan signs in to Microsoft Graph with delegated, read-only
    scopes, reads your users and subscribed SKUs, and reports how much money is
    tied up in licenses assigned to accounts that should not have them. It writes
    a self-contained, interactive HTML report and prints its path. Nothing leaves
    your tenant; there is no app registration and no account to create.

    The tool is deliberately narrow: a single point-in-time scan of one Microsoft
    365 tenant. Continuous monitoring, history, cross-vendor correlation, and
    alerting are the hosted product at https://www.licensemeter.com.

WHAT IT CHECKS
    Disabled, still licensed
        A blocked sign-in account that still holds a paid license. The classic
        offboarding leak.

    Inactive, still licensed
        A licensed account with no activity for N days (default 90).

    Never signed in, still licensed
        A licensed account created more than 30 days ago that has never signed in.

    Redundant license
        A standalone license already included in a suite the same user holds
        (for example Entra ID P2 alongside Microsoft 365 E5), or a lower Office
        365 tier held alongside a higher tier / matching Microsoft 365 suite.
        Conservative and high-confidence; only flagged on accounts not already
        flagged above.

    Deleted, still licensed
        A soft-deleted user still holding a paid license during the 30-day
        recycle window. Best-effort; skipped silently if the read is unavailable.

WHAT ELSE THE REPORT SHOWS
    Unused purchased seats
        Paid seats you have prepaid but not assigned, priced per SKU. Reported
        separately from per-account waste.

    Subscriptions needing attention
        Subscriptions in a warning, suspended, or locked-out state.

    Broken license assignments
        Assignments reporting an error (not applying). Informational; never
        counted in the waste total.

    Every finding also shows the department and whether the license is assigned
    directly or through a group, and the report frames waste as a percentage of
    your total Microsoft 365 license spend.

ACTIVITY SIGNAL
    The inactive and never-signed-in checks need an activity signal:

      1. Preferred: signInActivity from Microsoft Graph (Entra ID P1 plus
         AuditLog.Read.All).
      2. Fallback: the Microsoft 365 active-user usage report
         (Reports.Read.All) when Entra ID P1 is absent. If the report has
         concealed user names, the per-user join is not possible and these two
         checks are skipped.
      3. If no signal is available, those checks are skipped and the report says
         so. The disabled and redundant checks still run.

PERMISSIONS (ALL READ-ONLY)
    User.Read.All users, assigned licenses, account status, userType,
                            department, license assignment states (direct/group
                            and assignment errors), soft-deleted users
    Organization.Read.All subscribed SKUs and the tenant name
    AuditLog.Read.All signInActivity (requires Entra ID P1)
    Reports.Read.All usage-report fallback when Entra ID P1 is absent

    The tool never requests a write scope and refuses to run if one is granted.

PRICING
    Costs use a bundled price book of public list-price estimates. No Microsoft
    API exposes negotiated prices, so edit any price inline in the report to
    explore live, or set permanent prices with -PriceFile or a ./prices.json in
    the working folder. Free and trial SKUs ship at 0; unrecognized SKUs appear
    with a "set price" prompt.

EXAMPLES
    LicenseMeterScan
    LicenseMeterScan -InactiveDays 60 -OutputHtml ./waste.html
    LicenseMeterScan -PriceFile ./prices.json -OutputCsv ./waste.csv
    LicenseMeterScan -ExcludeGuests -Quiet -PassThru
    LicenseMeterScan -TenantId contoso.onmicrosoft.com -UseDeviceCode

SEE ALSO
    Get-Help Invoke-LicenseMeterScan -Full
    https://github.com/ugurkocde/licensemeter
    https://www.licensemeter.com