Jump to content

.bat wirft Fehler unter W2008 R2


Direkt zur Lösung Gelöst von Jetter,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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.

 

Link zu diesem Kommentar

@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.

Link zu diesem Kommentar

@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.

Link zu diesem Kommentar
@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

Link zu diesem Kommentar

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).

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
  • Beste Lösung

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...