Key points
- Maintain a centralized license inventory instead of tracking software licenses across scattered spreadsheets and teams.
- Query the Windows registry with PowerShell to discover installed Adobe and Microsoft applications and catch license mismatches early.
- Verify license assignments directly in the Adobe Admin Console and Microsoft 365 Admin Center, since local installs alone don’t confirm compliance.
- Enforce software compliance with Group Policy and AppLocker to stop unlicensed applications from running on managed endpoints.
- Automate non-compliance alerts and software cleanup so audit readiness doesn’t rely on manual spot checks.
A software license audit is only daunting if you’re unprepared. Issues like undocumented usage, triggering unexpected fees, or resulting in penalties if compliance isn’t provable may arise if you’re not able to proactively manage software licensing audits. That’s why it’s crucial to understand the process to prevent license audit problems before they exist. In this guide, we will walk you through the best practices and strategies in managing software licensing audits.
At a glance
| Task | Purpose |
| Task 1: Maintain a centralized license inventory | To have a single source of truth for all software licenses, enabling easier tracking, auditing, and compliance verification |
| Task 2: Use PowerShell to discover installed software and licensing information | To quickly identify installed applications and collect available license and activation information across endpoints, improving visibility for compliance checks |
| Task 3: Detect Adobe installations via PowerShell | To identify Adobe applications on endpoints for license compliance reviews and help detect mismatches or unlicensed installations |
| Task 4: Use GPO to enforce application control and support software compliance | To ensure only licensed and approved applications can run on endpoints by applying Group Policy restrictions |
| Task 5: Validate via CMD and Windows license tools | To confirm Windows license activation status and troubleshoot licensing errors using built-in command-line tools |
| Task 6: Automate non-compliance alerts and cleanup | To proactively detect and address licensing violations by alerting admins and removing unauthorized software automatically |
Prerequisites for managing software licensing audits
Before proceeding with software licensing audit management, make sure your environment meets the following requirements:
- Microsoft 365 Admin Center access and any Volume Licensing portals for managing Microsoft subscriptions and licenses.
- Adobe Admin Console centrally manages Creative Cloud and Acrobat DC licensing.
- PowerShell 7.6 LTS (recommended) or Windows PowerShell 5.1, with administrative privileges at your management stations. (Check your PowerShell Version)
- Endpoint coverage via RMM tools or GPOs to reach all devices.
- Mechanisms to detect software and collect endpoint information, such as registry checks, installed software inventories, or file system scans.
Task 1: Maintain a centralized license inventory
Use Case:
Maintaining a centralized license inventory enforces a strong compliance posture. This task tracks every software title, licensing type, and activation model.
Below are recommended steps for maintaining a centralized license inventory.
- Track the following:
- Per-user licenses: These include licensing tied to an individual user account. Examples include software like Microsoft 365, Adobe CC, and more.
- Per-device licenses: These cover licenses assigned to specific hardware, including volume license, OEM licenses, and other license types.
- Subscription vs. perpetual: This task identifies subscription licenses (paid on a recurring basis) from perpetual licenses (paid once for perpetual use).
- Cloud-assigned vs locally installed: Tracking of licenses to determine which software is provisioned through a cloud service, and which ones are physically stored on device storage.
- Store the inventory using the following:
- Cloud storage platforms: Store inventory data in cloud storage platforms like OneDrive or SharePoint.
- IT documentation services: A purpose-built IT documentation platform for MSPs is also ideal for this task. Some comprehensive endpoint management platforms, like NinjaOne, also have integrated IT asset management, which can also be used to store and manage your license inventory.
- Custom PowerShell-generated reports: Specific scripts can automatically collect available licensing and installation data from endpoints, format it into readable reports (CSV, HTML, etc.), and save it in a central repository for ongoing audit readiness.
Task 2: Use PowerShell to discover installed and licensing information
Use Case:
This task retrieves a filtered list of installed applications and available licensing information by manually running PowerShell commands.
Automated discovery is critical for keeping your license inventory accurate. One way to do this is by using PowerShell to query installed software, check activation details of Microsoft 365 subscription apps, and retrieve activation status of Microsoft Office. Here are some example steps:
- Open PowerShell as an administrator. Press the Windows key, type PowerShell, then right-click Windows PowerShell and select Run as administrator.
- Run the following command:
- To list all Adobe and Microsoft Office applications registered in the Windows Uninstall registry:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Where-Object {
$_.DisplayName -like “*Adobe*” -or
$_.DisplayName -like “*Office*”
} |
Select-Object DisplayName, DisplayVersion, InstallDate
This command retrieves Adobe and Microsoft Office applications registered in the Windows uninstall registry, displaying their names, versions, and installation dates.
Note: The scope of this command is the device where it’s executed. If you have hundreds of computers, you would need to run this individually on each one. For scalability, organizations often use RMM tools like NinjaOne to automate this discovery by pushing mass scripts across all managed endpoints.
- To view locally installed Microsoft 365 Click-to-Run product configuration, run
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration |
Select-Object ProductReleaseIds
Note: This command displays locally installed Click-to-Run product information only. To verify assigned Microsoft 365 licenses or subscription status, use the Microsoft 365 Admin Center or Microsoft Graph.
- To retrieve activation status, you can:
cscript “C:\Program Files\Microsoft Office\Office16\ospp.vbs” /dstatus
Note: The ospp.vbs script may not be available in all Microsoft 365 installations. Its location and availability depend on the installed Office edition and installation type.
Task 3: Detect Adobe installations via PowerShell
Use Case:
This task identifies installed Adobe applications on an endpoint and compares them with user license assignments in the Adobe Admin Console to identify unauthorized installations or expired licenses.
- Open PowerShell as an administrator. Press the Windows key, type PowerShell, then right-click Windows PowerShell and select Run as administrator.
- Run the following command:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Where-Object {
$_.DisplayName -like “*Adobe*” -or
$_.DisplayName -like “*Office*”
} |
Select-Object DisplayName, DisplayVersion, InstallDate
This command retrieves Adobe and Microsoft Office applications registered in the Windows Uninstall registry, displaying their names, versions, and installation dates. The results can be compared with Adobe Admin Console license assignments during compliance reviews.
Task 4: Use GPO to enforce application control and support software compliance
Use Case:
This task helps prevent unauthorized software from running on managed endpoints by applying Group Policy restrictions and controlling which applications can run within the network.
Group Policy provides a powerful mechanism for application control by restricting which applications can run on managed endpoints. Here’s a breakdown:
- Open the Group Policy Editor.
- For a standalone computer, press Win + R, type gpedit.msc, and press Enter.
- For a domain environment, open Group Policy Management (gpmc.msc), edit the appropriate GPO, and navigate to the following path.
- Under User Configuration > Administrative Templates > System:
- Enable Run only specified Windows applications to lock down software installs.
- Or use Don’t run specified Windows applications to block known unlicensed or pirated apps.
- For more advanced control, use Software Restriction Policies or AppLocker to prevent unauthorized Adobe or Microsoft Office applications from running.
- Navigate to:
- Computer Configuration > Windows Settings > Security Settings > Software Restriction Policies
- Computer Configuration > Windows Settings > Security Settings > Application Control Policies > AppLocker
- Or, for instance, create path rules to block installers like setup.exe used by pirated software, or hash rules for known cracked versions.
- Navigate to:
Task 5: Validate via CMD and Windows license tools
Use Case:
This task aims to confirm Windows and Microsoft Office activation status to avoid service disruptions and ensure devices meet licensing requirements.
- Open the Command Prompt as an administrator. Press the Windows key, type cmd, right-click Command Prompt from the search results, and select Run as administrator.
- To view Windows licensing and activation details, run:
slmgr.vbs /dli or slmgr.vbs /xpr
These commands display Windows activation status, license type, and whether the system is permanently activated.
- To view Microsoft Office activation information, you need to run the ospp.vbs script. Microsoft installs this built-in script with every volume-licensed Office installation to report on your license and activation information. You don’t need to download it; it’s already on your system.
To run it, locate it first. The ospp.vbs script is typically located in the Office installation folder:
- C:\Program Files\Microsoft Office\root\Office16 (for 64-bit Office on 64-bit Windows)
- C:\Program Files (x86)\Microsoft Office\root\Office16 (for 32-bit Office on 64-bit Windows)
You have to navigate to the directory where the ospp.vbs script is stored. Use one of the following commands, depending on your Office version and system architecture:
- For 64-bit Office on a 64-bit OS, run:
cd “C:\Program Files\Microsoft Office\root\Office16”
- For 32-bit Office on a 64-bit OS:
cd “C:\Program Files (x86)\Microsoft Office\root\Office16″v
NOTE: The “Office16” folder is for Office 2016 and 2019. This number changes depending on the version (e.g., “Office15” for Office 2013, “Office14” for Office 2010).
Open Command Prompt (opened as administrator). Run the following script with the cscript command:
cscript ospp.vbs /dstatus
Running this script will display the activation status, license type, and the remaining grace period if applicable.
- To ensure Adobe’s Creative Cloud desktop application, open Windows PowerShell as an administrator, then run the following commands:
Get-Process “Creative Cloud”
- To get a full list of installed products for additional cross-checking:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
Task 6: Automate non-compliance alerts and cleanup
Use Case:
You can do this task to automatically detect, alert, and remove unlicensed or prohibited software. It can help maintain compliance without relying solely on manual reviews.
Automation helps with scaling compliance checks. Here are some recommendations:
- Schedule scripts to detect unauthorized software by comparing installed lists to your licensed inventory.
- Use supported deployment tools, such as Microsoft Intune, the Office Deployment Tool (ODT), or your RMM platform, to automatically uninstall unauthorized or deprecated software across managed devices.
- Log all actions such as software removals, alerts, and automation activities. This helps provide evidence to support software license audits.
Things to look out for
| Risks | Potential Consequences | Reversals |
| Missing license data | Licensing commands may return incomplete or inaccurate information, leading to false compliance or activation status assumptions. | Reinstall or reconfigure the software with the correct installation context (per-machine vs. per-user), then re-run validation commands. |
| Script failures | Commands or scripts fail to execute, producing no output or incomplete results, which delays license verification. | Run the shell with administrative privileges, check file paths, and adjust execution policies (Set-ExecutionPolicy) to allow the script to run. |
| Office activation errors | Users may experience reduced functionality in Microsoft Office apps (e.g., read-only mode), impacting productivity. | Run Microsoft’s Office Repair tool, or follow official activation troubleshooting steps in Microsoft Learn to reactivate. |
| Adobe Creative Cloud (CC) sync issues | Users may lose access to assigned Adobe apps or encounter missing licenses in the Creative Cloud desktop app. | Force a sync from the Creative Cloud desktop app or sign in/out; if issues persist, verify assignments in the Adobe Admin Console and reassign as needed. |
Additional considerations for managing software license audits
- BYOD and remote devices: Track software usage and license assignments through Microsoft 365 and Adobe admin portals.
- Inactive accounts: Deactivate or reassign licenses for inactive users based on your organization’s policy.
- Retention policies: Store procurement and license records according to your organization’s retention policy and applicable compliance requirements.
- Audit requests: Be ready to produce reports showing license counts, assignments, usage history, and purchase logs on demand.
How NinjaOne supports software licensing audit management
NinjaOne and its tools can help MSPs maintain continuous license hygiene and confidently generate audit-ready reports.
| NinjaOne service | What it is | How it helps with software licensing audit management |
| Software inventory monitoring | Detect all installed applications across clients. | Helps maintain an up-to-date inventory of installed software, making it easier to compare software deployments with license records and identify unauthorized or outdated applications. |
| Registry monitoring and PowerShell automation | Collect registry values and other system information related to installed software and licensing. | Helps collect configuration and licensing-related information that can be compared with license records during compliance reviews. |
| Alerting | Notify MSPs when unauthorized software is detected or when configured licensing-related conditions are met. | Provides timely alerts that help administrators investigate potential licensing issues before they become audit findings. |
| Automation scripts | Remove deprecated software, deploy compliance tools, or export license reports. | Speeds up compliance tasks by automating software removal, deploying tools for license validation, and generating reports for audits. |
| Cross-tenant dashboards | Aggregate software inventory and asset information across multiple client environments from a single dashboard. | Provides centralized visibility into software inventory across multiple clients, making it easier to review deployments and prepare for software license audits. |
Managing software licensing audits proactively
Carrying out operations to manage software licenses may seem tedious. However, following these recommendations can save you from unexpected, and most of the time, disruptive issues due to software license misaudits. In summary, we covered:
- How to discover and track Microsoft and Adobe software installations
- PowerShell, CMD, registry, and GPO methods to support software license compliance
- Centralized documentation and automation strategies
- How NinjaOne helps organizations prepare for software license audits.
All these strategies can help you proactively and confidently prepare for a software license audit.
Related topics:
- Viewing Software Inventory
- Software Inventory Reports
- What is Compliance Management? Definition & Importance
- IT Compliance: Definition, Standards, and Risks
Quick-Start Guide
NinjaOne does provide some relevant capabilities:
- IT Asset Management: NinjaOne has an IT Asset Management module that allows you to:
- Track and report managed device and software inventory
- Collect hardware and software inventory details
- Create custom reports on device and software information
- Software Installation and Patching: The platform offers features to:
- Identify and evaluate software
- Deploy software and patches
- Monitor application management progress
- Track software installations

