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 |