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). Conservative and
        high-confidence; only flagged on accounts not already flagged above.

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
    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