Fireplace April 2026

Batch Hyperworks Lizenzen berechnen/auslesen

Brutzelbube

Cadet 4th Year
Registriert
Aug. 2011
Beiträge
66
Schönen Guten Tag CB-Community,

Ich hab mal wieder einen dieser Fälle wo man einfach nicht weiß ob das überhaupt geht.

Ich würde gerne wissen wieviele Hyperworks Lizenzen zurzeit frei sind. Die Antwort soll mir ein Skript geben.

Als Info: Wir haben 150.000 Lizenzen und wenn ein Mitarbeiter die Teile der Software startet zieht diese ein paar Lizenzen von den 150.000 ab. Das ganze sieht im Log-file so aus:

[2012-11-21 06:28:44] CHECKIN by Benutzername@Computername [IP-Adresse]: HyperWorks (25000 licenses)

(Computername / Benutzername / IP-Adresse sind nur Platzhalter eigentlich steht da wirklich was drin aber das braucht ihr ja nicht wissen :P)

So nun hat sich ein Benutzer 25.000 Lizenzen geholt. Und wenn er die Zurückgibt sieht das so aus:

[2012-11-21 06:29:31] CHECKOUT by Benutzername@Computername [IP-Adresse]: HyperWorks (25000 licenses)

Meine Frage ist nun: Kann ich das Log-File mit Batch so durchsuchen, das ich die Informationen CHECKIN / CHECKOUT / Benutzername und Anzahl der Lizenzen bekomme?

Falls jemand meint das geht vielleicht mit Powershell besser das würde mir auch helfen aber sonstige Programmiersprachen kann ich leider garnicht.
 
Hi,

klar kannst du das machen.

In PowerShell würde es zum Beispiel so gehen... Das ist jetzt einfach nur fix dahin geschrieben und ohne jegliche Prüfung (Reihenfolge, passt die Uhrzeit, mehr zurück als ausgebucht, usw...) und geht davon aus das Datum + Uhrzeit immer genau so in Log geschrieben werden...

Code:
$data = Get-Content .\Log.txt

$total_number = $free = 150000

$data | ForEach-Object {
	
	$user	= (($_.Split("@") | Select-Object -First 1).split("by") | Select-Object -Last 1).trim()
	$number	= ($_.Split("(") | Select-Object -Last 1).split(" ") | Select-Object -First 1

	if ($_.Substring(22,7) -eq "CHECKIN") {
		
		$action	= $_.Substring(22,7)
		$free -= [int]$number
	}
	
	if ($_.Substring(22,8) -eq "CHECKOUT") {
		
		$action	= $_.Substring(22,8)
		$free += [int]$number
	}	
	
	Write-Host $action":" $user" Anzahl: "$number" Insgesamt noch frei: "$free
}

Write-Host ""
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Du musst nur das ".\Log.txt" (bei ".\" geht er davon aus das das Skript im gleichen Verzeichnis wie das Logfile liegt, du kannst natürlich auch den Pfad mit angeben) und die Anzahl anpassen. Eventuell musst du noch die Executionpolicy der Powershell anpassen damit die Skripte ausführen kannst.

Gruß,
sal
 
Zuletzt bearbeitet: (Code noch geändert.)
Zurück
Oben