Automatische Meldung des Lizenzverbrauchs
Reportdatei manuell generieren
XML-Format in gut leserliche Form konvertieren
Hinweis! Als ThinPrint-Service-Provider haben Sie seit Lizenzserver-Version 10.6 die Möglichkeit, die Zuordnung von ThinPrint-Lizenzen zu Nutzern automatisiert vornehmen zu lassen. Nutzer bekommen dann in dem Moment automatisch eine Lizenz zugewiesen, wenn sie zum ersten Mal drucken.
Das vereinfacht die Administration der Lizenzen extrem und ermöglicht die Abrechnung von ThinPrint exakt nach tatsächlicher Nutzung. Insbesondere in Umgebungen mit schwankenden Nutzerzahlen ist beides von sehr großem Vorteil.
Zusätzlich können Sie nach wie vor Nutzern und Nutzergruppen ihre Lizenzen manuell zuweisen (beispielsweise durch Import aus dem Microsoft Active Directory) oder auch von der automatischen Lizenzzuweisung ausnehmen.
Die Abrechnung von ThinPrint an Sie als Service-Provider erfolgt anhand eines monatlichen Reports, in dem Ihre Kunden für ThinPrint anonym bleiben. Sie als Service-Provider können zusätzlich einen zweiten internen Report erstellen, in dem Sie die Zuordnung der Lizenzen zu Ihren einzelnen Kunden ablesen können. Dieser Report ermöglicht Ihnen wiederum, eine genaue Abrechnung nach Nutzung Ihren Kunden gegenüber.
Das vorliegende Dokument erläutert, wie diese Reportdateien zur Ermittlung der aktivierten Anwender automatisiert generiert werden können.
Automatische Meldung des Lizenzverbrauchs
Technische Anforderungen
- ThinPrint-Lizenzserver 13.1.6
- Internet-Verbindung via TCP-Port 443 (ausgehende Kommunikation)
Feature aktivieren
Die Funktion ist standardmäßig deaktiviert und muss über den Windows Task Scheduler aktiviert werden.
Reportdatei manuell generieren
Seit Version 10.6 des Lizenzservers ist es möglich, per Kommandozeile eine Reportdatei generieren zu lassen. Dazu müssen Sie in das entsprechende Verzeichnis auf dem Lizenzserver wechseln. Standardmäßig befindet sich das Kommando in folgendem Verzeichnis:
C:\Program Files\Common Files\ThinPrint
- – Starten Sie die Kommandozeile mit administrativen Rechten. Das aufzurufende Kommando lautet:
cclucs.exe -report [FILE]
[FILE]
steht für Pfad und Dateiname. Beispiel:
cclucs.exe -report c:\temp\ThinPrintLicenseReport.xml
Die Angabe des Dateisuffixes ist beliebig. Inhaltlich wird aber immer XML erstellt. Insofern empfiehlt es sich, als Format .xml zu wählen.
Inhalt der Reportdatei
Die Datei enthält am Ende eine Signatur, welche die Erstellung gegenüber ThinPrint verifiziert. Für eine Weiterverarbeitung oder den Import in andere Applikationen zu internen Zwecken muss die Signatur gegebenenfalls entfernt werden.
Domäne bleibt anonym
Die Domäne ist dabei nur als SID sichtbar und somit für ThinPrint anonymisiert. Für interne Zwecke kann man den Klarnamen der jeweiligen Domäne mit geeigneten Tools – beispielsweise PSGetSID von Sysinternals – ermitteln.
Style-Sheet
Eine übersichtlichere Darstellung lässt sich beispielsweise unter Verwendung der Transform-Funktion von Excel erreichen. Dazu muss ein entsprechendes Style-sheet – hier: ThinPrintLicenseReport.xsl – erstellt werden:
<?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="https://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <table border="2" bgcolor="yellow"> <tr> <th>Domain</th> <th>Date</th> <th>UserCount</th> </tr> <xsl:for-each select="LicenseReport/Product/Domain[@DomainSid!='S-1-5-32']"> <tr> <td><xsl:value-of select="@DomainSid"/></td> <td><xsl:value-of select="@Date"/></td> <td><xsl:value-of select="@UserCount"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
XML-Format in gut leserliche Form konvertieren
Mittels PowerShell-Skript lässt sich die ursprüngliche Reportdatei (im XML-Format) anschließend in eine optische besser lesbare Form konvertieren (hier als ThinPrintLicenseReport.ps1):
param ($xml, $xsl, $output) if (-not $xml -or -not $xsl -or -not $output) { Write-Host "& .\xslt.ps1 [-xml] xml-input [-xsl] xsl-input [-output] transform-output" exit; } trap [Exception] { Write-Host $_.Exception; } $tempFile = [System.IO.Path]::GetTempFileName(); (Get-Content $xml) -notmatch "[0-9a-f].*" | Out-File $tempFile Import-Module ActiveDirectory <# Get Distinguished Name #> $objDomain = Get-ADDomain $objDomainDN = (Get-ADDomain).DistinguishedName <# Get current Domain SID #> $CurrentDomainSID = (Get-ADDomain).DomainSID <# Get Forest Domains #> $objForestDomains = (Get-ADForest).Domains <# Replace all SIDs in $tempFile that match any of the Forest Domains #> foreach ($Domain in $objForestDomains) { try { $DomainResult = Get-ADDomain -server $Domain -ErrorAction SilentlyContinue | select DNSroot, DomainSID -ErrorAction SilentlyContinue $xmlContent = (Get-Content $tempFile) If ($xmlContent -match ($DomainResult | select -ExpandProperty DomainSID)) { $xmlContent = $xmlContent -replace ($DomainResult | select -ExpandProperty DomainSID), ($DomainResult | select -ExpandProperty DNSroot) $xmlContent | Out-File $tempFile } } catch { Write-Host ("Exception while contacting Domain " + $Domain + ".") Write-Host ($Error[0].Exception) } } #> <# Get Trusted Domains #> $objTrustedDomains = Get-ADObject -SearchBase "CN=System,$objDomainDN" -SearchScope OneLevel -LDAPFilter "(&(objectClass=trustedDomain)(!trustAttributes=32))" -Property name, securityIdentifier $TrustedDomainSIDs = $objTrustedDomains | select -ExpandProperty securityIdentifier $TrustedDomName = Get-ADObject -SearchBase "CN=System,$objDomainDN" -SearchScope OneLevel -LDAPFilter "(&(objectClass=trustedDomain)(!trustAttributes=32))" -Property name, securityIdentifier | select -ExpandProperty Name <# Replace all SIDs in $tempFile that match any of the Trusted Domains #> foreach ($TrustedDomain in $objTrustedDomains) { try { $xmlContent = (Get-Content $tempFile) If ($xmlContent -match ($TrustedDomain | select -ExpandProperty securityIdentifier)) { $xmlContent = $xmlContent -replace ($TrustedDomain | select -ExpandProperty securityIdentifier), ($TrustedDomain | select -ExpandProperty Name) $xmlContent | Out-File $tempFile } } catch { Write-Host ("Exception while contacting Domain " + $Domain + ".") Write-Host ($Error[0].Exception) } } $xslt = New-Object System.Xml.Xsl.XslCompiledTransform; $xslt.Load($xsl); $xslt.Transform($tempFile, $output); remove-item -path $tempFile;
Eine entsprechende Namensgebung für die Skripte vorausgesetzt, würde der Aufruf folgendermaßen lauten:
.\ThinPrintLicenseReport.ps1 C:\temp\ThinPrintLicenseReport.xml c:\temp\ThinPrintLicenseReport.xsl c:\temp\ThinPrintLicenseReport.html
Die Browser-Darstellung der erzeugten Datei ThinPrintLicenseReport.html zeigt das folgende Bild:
Zusammenfassung
Für die Anzeige des Lizenzverbrauchs gegenüber der ThinPrint GmbH senden Sie uns die Reportdatei im XML-Format zu – z. B. ThinPrintLicenseReport.xml.
Für die interne Abrechnung – bzw. die Abrechnung gegenüber Ihren Kunden – können Sie Reports erzeugen, die den Lizenzverbrauch pro Domäne anzeigen. Dazu können Sie das oben aufgeführte Beispielskript verwenden.
Kann die Domäne nicht aufgelöst werden, erscheint anstelle des Domänennamens die SID der Domäne.