Jetter 11 Geschrieben 2. November 2015 Melden Teilen Geschrieben 2. November 2015 Ich ein Script auf einem Windows 2012 R2 erstellt um die freien Lizenzen von Citrix zu ermitteln und diesen Wert an unser Nagios zu übermitteln. Auf dem W2012R2 läuft das Script auch ohne Probleme. Nun will ich das ganze auf einem W2008R2 laufen lassen und bekomme folgenden Fehler in der folgenden Codezeile: for /f "tokens=6,11" %%a in ('lmstat -a -c 27000@<servername> ^| findstr /I XDT ^| findstr /I licenses') do set maxlicense=%%a && set curlicense=%%b Wenn ich diese Zeile direkt in einer Shell kommt dieser Fehlermeldung: PS C:\Program Files (x86)\Citrix\Licensing\LS>for /f "tokens=6,11" %%a in ('lmstat -a -c 27000@<servername> ^| findstr /I XDT ^| findstr /I licenses') do set maxlicense=%%a && set curlicense=%%b Fehlende öffnende "(" nach dem Schlüsselwort "for". Bei Zeile:1 Zeichen:5 + for <<<< /f "tokens=6,11" %%a in ('lmstat -a -c 27000@wps-citrix.wpsd.lcl ) + CategoryInfo : ParserError: (OpenParenToken:TokenId) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword Ich hoffe es kann mir hier einer weiterhelfen. Zitieren Link zu diesem Kommentar
Sunny61 810 Geschrieben 2. November 2015 Melden Teilen Geschrieben 2. November 2015 Du willst eine Batch in Powershell ausführen? Zumindest sieht für mich die Zeile mit der Fehlermeldung so aus. Zitieren Link zu diesem Kommentar
testperson 1.729 Geschrieben 2. November 2015 Melden Teilen Geschrieben 2. November 2015 Hi, wie wäre es mit PowerShell und WMI: Get-WmiObject -class "Citrix_GT_License_Pool" -Namespace "ROOT\CitrixLicensing" -ComputerName localhost | where { $_.InUseCount -gt 0 } | fl Count, InUseCount Gruß Jan Zitieren Link zu diesem Kommentar
Jetter 11 Geschrieben 3. November 2015 Autor Melden Teilen Geschrieben 3. November 2015 @Sunny61, das hast du richtig gesehen. Ich führe das Script in einer Powershell aus. Dieses geht auf dem W2012R2 ja auch ohne Problem. Von daher sollte es doch auf dem W2008R2 eigentlich auch gehen. Ich habe es aber auch einmal in einer DOS Shell ausgeführt. C:\Program Files (x86)\Citrix\Licensing\LS>for /f "tokens=6,11" %%a in ('lmstat -a -c 27000@<servername> ^| findstr /I XDT ^| findstr /I licenses') do set maxlicense=%%a && setcurlicense=%%b "%%a" kann syntaktisch an dieser Stelle nicht verarbeitet werden. C:\Program Files (x86)\Citrix\Licensing\LS> @testperson, theoretisch könnte ich es auch mit Powershell und WMI machen, auch wenn ich mich da noch weniger auskenne. Ich habe deine Zeile mal ausgeführt, aber keine Ausgabe erhalten. PS C:\Program Files (x86)\Citrix\Licensing\LS> Get-WmiObject -class "Citrix_GT_License_Pool" -Namespace "ROOT\CitrixLicensing" -ComputerName localhost | where { $_.InUseCount -gt 0 } | fl Count, InUseCount PS C:\Program Files (x86)\Citrix\Licensing\LS> Am liebsten wäre es mir aber wenn die .bat gehen würde, da ich dort schon das "drum herum" fertig habe. Gruß, J.M. Zitieren Link zu diesem Kommentar
Sunny61 810 Geschrieben 3. November 2015 Melden Teilen Geschrieben 3. November 2015 @Sunny61, das hast du richtig gesehen. Ich führe das Script in einer Powershell aus. Dieses geht auf dem W2012R2 ja auch ohne Problem. Von daher sollte es doch auf dem W2008R2 eigentlich auch gehen. Hmm, ich würde nie auf die Idee kommen eine Batch in einer Powershell Commandline laufen zu lassen. Ich habe es aber auch einmal in einer DOS Shell ausgeführt. C:\Program Files (x86)\Citrix\Licensing\LS>for /f "tokens=6,11" %%a in ('lmstat -a -c 27000@<servername> ^| findstr /I XDT ^| findstr /I licenses') do set maxlicense=%%a && setcurlicense=%%b "%%a" kann syntaktisch an dieser Stelle nicht verarbeitet werden. C:\Program Files (x86)\Citrix\Licensing\LS> Die doppelten Prozentzeichen darfst Du nur in einer Batch verwenden, wenn Du den Befehl direkt auf der Commandline eingibst, dann nur mit einem Prozentzeichen. Zitieren Link zu diesem Kommentar
testperson 1.729 Geschrieben 3. November 2015 Melden Teilen Geschrieben 3. November 2015 @testperson, theoretisch könnte ich es auch mit Powershell und WMI machen, auch wenn ich mich da noch weniger auskenne. Ich habe deine Zeile mal ausgeführt, aber keine Ausgabe erhalten. PS C:\Program Files (x86)\Citrix\Licensing\LS> Get-WmiObject -class "Citrix_GT_License_Pool" -Namespace "ROOT\CitrixLicensing" -ComputerName localhost | where { $_.InUseCount -gt 0 } | fl Count, InUseCount PS C:\Program Files (x86)\Citrix\Licensing\LS> Am liebsten wäre es mir aber wenn die .bat gehen würde, da ich dort schon das "drum herum" fertig habe. Gruß, J.M. Hi, hast du das ganze auch auf dem Citrix Lizenzserver gemacht? Ansonsten musst du den Parameter "-ComputerName localhost" natürlich anpassen und ggfs. die Windows Firewall entsprechend konfigurieren. Gruß Jan Zitieren Link zu diesem Kommentar
Dukel 457 Geschrieben 3. November 2015 Melden Teilen Geschrieben 3. November 2015 Welche Powershell Version hast du auf dem 2012 Server? Welche auf dem 2008 Server? Es gab Änderungen in der Powershell die das Ausführen von CMD Shell Code betrifft. Daher kann es bei dem einen gehen und beim anderen nicht. Ich würde keine bat Dateien in der Powershell laufen lassen sondern eher in der cmd oder, besser, den Code auf Powershell umschreiben (bzw. die Lösung von Testperson umsetzen). Zitieren Link zu diesem Kommentar
Jetter 11 Geschrieben 3. November 2015 Autor Melden Teilen Geschrieben 3. November 2015 Hallo, @Sunny61, ich habe es auch einmal mit nur einem % Zeichen ausprobiert, die Fehlermeldung bleibt allerdings die gleiche. @testperson, ich habe die Zeile direkt auf dem Citrix Lizenzserver ausgeführt. @Dukel, das mit dem ausführen auf einer Powershell ist ja nur ein Test. Nachher wird das ganze ja von NSClient++ und Nagios ausgerufen. Wenn ich das auf WMI umstelle müsste ich quasi das drumherum neu erstellen, sprich schauen wie der State für Nagios zurück gegeben werden muss etc. Außerdem liefert derzeitig die Zeile ja keine Ausgabe ;( Hier die Information bzgl. der Powershell Version (mit $PSVersionTable.PSVersion ausgelesen.): W2008R2 Major: 2 Minor: 0 Build: -1 Revision: -1 W2012R2 Major: 4 Minor: 0 Build: -1 Revision: -1 Schön wäre es natürlich wenn ich etwas hätte was auf beiden Server funktioniert. Gruß, J.M. Zitieren Link zu diesem Kommentar
testperson 1.729 Geschrieben 3. November 2015 Melden Teilen Geschrieben 3. November 2015 Hi, welche Citrix Lizenzserver Version ist denn installiert? Gruß Jan Zitieren Link zu diesem Kommentar
Dukel 457 Geschrieben 3. November 2015 Melden Teilen Geschrieben 3. November 2015 Dann führe das Script in der CMD aus. Zitieren Link zu diesem Kommentar
Jetter 11 Geschrieben 3. November 2015 Autor Melden Teilen Geschrieben 3. November 2015 Hallo, @testperson, auf dem W2008R2 ist es v11.10 und auf dem W2012R2 ist es v11.12, der Befehl lmstat.exe -a -c 27000@servername liefert auf beiden eine entsprechende Ausgabe. @Dukel, wenn ich das Script in einer CMD ausführe kommt folgendes: c:\Program Files\NSClient++\scripts>display_nr_free_lic.bat Fehlender Operand "0" kann syntaktisch an dieser Stelle nicht verarbeitet werden. Es sieht so aus als ob er keine Werte bekommt die er in die Variablen füllen kann. Mir ist aber gerade aufgefallen das bei W2012R2 eine andere Lizenzart benutzt wird, entsprechend musste ich die Suche nach dem String auf dem W2008R2 anders gestallten. Nun geht es. Vielen Dank an alle beteiligten, ihr habt dazu beigetragen das der Fehler gefunden wurde! Gruß, J.M. Zitieren Link zu diesem Kommentar
Sunny61 810 Geschrieben 3. November 2015 Melden Teilen Geschrieben 3. November 2015 Freut mich für dich, jetzt fehlt nur noch das korrigierte und funktionierende Script für die Nachwelt. ;) Zitieren Link zu diesem Kommentar
Beste Lösung Jetter 11 Geschrieben 3. November 2015 Autor Beste Lösung Melden Teilen Geschrieben 3. November 2015 Hallo, Freut mich für dich, jetzt fehlt nur noch das korrigierte und funktionierende Script für die Nachwelt. ;) da gebe ich dir recht hier dann also komplette Script: @echo off CD "C:\Program Files (x86)\Citrix\Licensing\LS" for /f "tokens=6,11" %%a in ('lmstat -a -c 27000@servername ^| findstr /I MPS ^| findstr /I licenses') do set maxlicense=%%a && set curlicense=%%b set /a free_lic=%maxlicense% - %curlicense% if %free_lic% EQU 0 ( set result=2 set state=Critical, no more licenses aviable echo Critical GOTO END ) if %free_lic% GEQ 1 ( set result=0 set state=Ok, not all licenses used GOTO END ) :END @echo on @echo %state% @EXIT %result% Aufpassen muss man in der Zeile 4, Citrix hat unterschiedliche Lizenzen die auch unterschiedliche Namen haben, da muss man das dann anpassen. Am besten vorher einmal schauen welche Lizenzen verwendet werden. Das kann man mit dem folgenden Befehl herausfinden: lmstat -a -c 27000@servername Der Befehl muss natürlich im richtigen Verzeichnis ausgeführt werden. Zitieren Link zu diesem Kommentar
Sunny61 810 Geschrieben 3. November 2015 Melden Teilen Geschrieben 3. November 2015 da gebe ich dir recht hier dann also komplette Script: Vielen Dank. ;) Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 3. November 2015 Melden Teilen Geschrieben 3. November 2015 Hm - soweit ich weiß, hat Citrix eigene PoSh-Module, da sollte sich das doch auch komfortabler lösen lassen :) https://www.citrix.de/downloads/xenapp/sdks/powershell-sdk.html Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.