Terminal Services Per User Licensing Usage Tracking

Terminal Services Per User Licensing Usage Tracking

  • Comments 15

Terminal Services Per User Licensing Usage Tracking

Prior to "Windows Server 2008" there was no way for administrators to check the usage of Terminal Services per user licenses. Terminal Services licensing in Windows Server 2008 Beta 3 enables administrators to track the usage of Terminal Services per user licenses. Administrators can generate a per user license usage report that contains the number of licenses issued by a particular license server and the total number of per user licenses available on that server, to make sure that license usage is in line with the EULA and licensing agreements.

Per user license usage reports can be generated across three different scopes:

1. Domain : Generates a per user usage report across the host domain of a Terminal Services Licensing Server (TSLS)

2. Organizational Unit (OU): Generates a per user license usage report across the given OU in the host domain of a TSLS

3. All Trusted Domains: Generates a per user license usage report across all trusted domains

Reports are accessible through the following mechanisms:

· TS Licensing Manager

· WMI providers

Managing Reports using TS Licensing Manager:

In Windows Server 2008, a new option in the TS Licensing Manager menu named "Create Report" can be used to generate and manage per user license usage reports.

To create a per user license usage report

1. Open TS Licensing Manager (LicMgr.Exe)

2. Right-click the license server name for which you want to generate the report, and then select the "Create Report" and "Per User CAL Usage …" options.

3. Select the scope for which you want to generate the report. (These are described above.)

To view summaries of generated reports, use the License Manager UI.

You can perform various operations on the generated reports:

1. The "Delete Report" option deletes the report.

2. The "Save As" option saves the usage report in a readable format. This is useful if you want to check users to whom licenses have been issued. To do this, first generate a report and then click "Save As" to give it a new name. Then open the report to review which users received licenses from that TSLS.

Here’s an example of a usage report:

Managing Reports using WMI Providers:

Windows Server 2008 also provides support for managing Per User usage reports using WMI providers. Now, an administrator can write a simple script to generate a usage report for a given scope. Within the script, he can take further action based on the reports. For example, if the number of issued licenses exceeds the number of installed licenses, the script can send an e-mail to the administrator.

Reports generated using WMI are displayed in the TS Licensing Manager, and reports deleted using WMI are also deleted from the TS Licensing Manager.

The following WMI classes are used to generate reports.


Windows Server 2008 has a WMI class named "Win32_TSLicenseReport" for managing per user license reports.

This WMI class provides three different interfaces to manage reports:

i. GenerateReport: This interface is used for generating per user license usage reports. Reports can be generated across three different scopes as discussed above. This is a static function.

The syntax of the API is

uint32 GenerateReport ( [in] uint32 ScopeType,

[in] string ScopeValue,

[out] string FileName);


ScopeType: Defines the scope for which the report needs to be generated

1 -> Domain

2 -> Organizational Unit (OU)

3 -> All trusted Domains

ScopeValue: This is used only when ScopeType is "Organizational Unit (OU)",

It should contain the name of the OU for which you want to generate the report in the format "OU=OUName"

FileName: This is an output parameter containing the file name of the report generated. This file name can be used to perform other operations on the report like Delete and FetchReport.

ii. DeleteReport: This interface is used to delete an existing per user usage report. This is not a static function and must be called from the per user report object.

The syntax of the API is

uint32 DeleteReport ( )

iii. FetchReportEntries: This interface is used to get the user name and other information from a per user usage report. This tool is not a static function and must be called from a per user usage report object.

The syntax of the API is

uint32 FetchReportEntries ( [in] uint32 StartIndex,

[in,out]        uint32 Count,

[out]         Win32_TSLicenseReportEntry ReportEntries[]);


StartIndex -> Index to start from

Count -> Number of values to be fetched;

If you need to fetch all entries then set StartIndex=0 and Count=0.

ReportEntries -> Array of the objects of Win32_TSLicenseReportEntry; These object contains DomainName\UserName, License Expiry date, Product Version

For more information, see Win32_TSLicenseReport.


The Win32_TSLicenseReportEntry class provides details of the Per User Licenses issued. This class has three members:

User: User to which the license was issued

ExpirationDate: Expiration date of the license

ProductVersion: Per user license version

For more information, see Win32_TSLicenseReportEntry.

Leave a Comment
  • Please add 7 and 1 and type the answer here:
  • Post
  • PingBack from http://blogs.msterminalservices.org/conger/2007/08/06/terminal-services-per-user-licensing-usage-tracking/

  • What i'd like to know is the following:

    Let's suppose that a company has a bunch (e.g. 15 of them) of shift worker and want's to create only on AD account that is used by all of them.

    So technically seen this would require only 1 per user TS CAL is that right?

    If so doese that confirm with the EULA?

  • In an earlier post , we showed how to create a per user license usage report in Windows Server 2008.

  • License are sold on a named device or named user model.  As such you would need a license for every user (15 in the example you gave).  

    You can still give them one account but obviously the license report would be innacurate.  Don't confuse your EULA / PUR obligations with what the license server reports.

  • Yeah that's really clever isn't it?

    I mean TS licensing has been more and more complicated since its introduction in W2K server.

    With W2K3 server Microsoft made the impossible possible and brought even more confusion to this topic since per user license tracking did not work the way per device license tracking did.

    Now we have another fact. The new per user license tracking is working but it still does not consider the "shared AD account scenario". What good is a license usage report (like the one discribed in this article) good for when it cannot take care of all possible usage scenarios? For this case I need to create my own excel file and cannot rely on the TS license report generated by TS license server.

    One question is left. Can you give me a link to the EULA where "named user model" is explaind in detail?

  • As you know from previous posts and conversations around User CALs, prior to "Windows Server 2008" there

  • In an earlier post , we showed how to create a per user license usage report in Windows Server 2008.

  • Hmmm... but this will not answer my question(s) will it?

  • Any chance we can finally get a "Revoke License" command?

  • Per-Device TSCALs can be revoked in Server 2008 Beta3.  That being said, there's no technical reason why this should be necessary, as temp licenses are issued and valid for 90 days, whereas per-device TSCALs are issued for only 54-89 days, so a per-device TSCAL issued to a client will be recovered before the temp license expires.

    If licensing per-user, this is not applicable, as those are not issued.

  • "I mean TS licensing has been more and more complicated since its introduction in W2K server."


    Try NT 4.0 TSE. And it's no more complicated than it was before. You just have more choices... ;-)

  • This is a waaay late question, but I've just recently started using the 2008 R2 RDS license manager and I notice that the Reports view has been significantly nerfed when compared to the version shown above.

    The only columns I have when viewing reports are Date, Scope, and Type.  The only way I can see report info is to export the report to a CSV, which doesn't include as much detail as is shown above.

    Is there any way to get the RD Licensing Manager to show report details in the manager directly?  If not, why such a terrible step backwards?


  • Hi Nick,

    PU Reporting in W2K8 R2 supports all the features of W2K8 as well. Additionally, it will have a summary section where it shows the CAL details (version, installed #, issued #, availability etc.).

    So, the issue you mentioned is not expected as part of W2K8 R2 PU Reporting behavior.Could you pl share some more details about the configuration being used (report scope etc.) & the exact screenshot you see ?

  • Hi Nick,

           I think you are talking about the removal of the columns "Installed CALs", "TS CALs In Use"  and "TS CAL Availability". The rationale behind the removal is to make PU reporting adaptable for different CAL Versions.

    For example if we introduce “Windows Server 2015 CAL” then the report will contain information about both “Windows Server 2008” as well as “Windows Server 2015” CAL. Here the sample data that the report will contain

    TS CAL Version TS CAL Type    Installed TS CALs TS CALs in Use TS CAL Availability

    Windows Server 2003 Per User          3                                    -                        Not Tracked

    Windows Server® 2008 Per User           1                                    5                       Not Available

    Windows Server® 2015 Per User            14                                     2                         Available

    When the above data is shown with the current UI, the "Data would not be accurate"


    Report Date : 06/18/2020 05:03:22  

    Report Scope:     Domain

    TS CAL Type :      Per User

    Installed CALs:                      18      

     TS CALs In Use:                     7    

    TS CAL Availability:   ??? (One Version of CAL will be available and the other version is not available)

    Hope it clarifies.

  • Ranjana,

    Thanks for the clarification.  I can't say that I agree with the change, I think it would be better to either separate the licenses into different license groups, or to have different reports for each license type.  Making an administrator jump through hoops to verify license compliance is the fast-track to making people not bother with checking at all.

    In any case, I appreciate yours and Saikat's really fast responses.  Thanks!

Page 1 of 1 (15 items)