hudson
Goto Top

Habt/Kennt Ihr ein Tool mit dem man Registrywerte bzw. Umgebungsvariablen per Kommandozeile editieren kann?

moin,

also, wenn bei uns sw (automatisch) installiert wird, werden bestimmte User/Systemvariablen immer durch neue Werte ersetzt. Warum ich das nicht will versuche ich im folgenden zu umschreiben...
Ihr kennt sicher die Variable LM_LICENSE_FILE (bei Netzwerklizenzen von Flexlm-Servern).
z.B.: LM_LICENSE_FILE=<PORT1>@<SERVER1>;<PORT2>@<SERVER2>;usw...

Wenn SW1 installiert wird, klappt ja noch alles wunderbar. Wenn SW2 die ihre eigenen Ports/Server hat wird der alte Eintrag rausgelöscht und durch den neuen ersetzt. Somit muss ich immer per Hand den alten Eintrag nachtragen. (Worauf ich nun wirklich keine Lust mehr habe!)

Das gleiche Spiel passiert, wenn ich z.B SW1 automatisch lösche... dann wird das LM_LICENSE_FILE komplett geleert und ich muss wieder per Hand rangehn.

Also würd ich am liebsten im automatischen Setup gar keine Einträge vornehmen, sondern alles im Installscript per Batchfile oder Ähnlichem machen.

Hab auch schon die Ressourcekit tools wie Pathman, setx, reg add, usw. probiert. Funktioniert alles ganz ok, bis auf den Punkt wo über eine Fehlerhafte Installation "drüberinstalliert" wird. Dann werden nämlich nie schon vorhandene Einträge im LM_LIC_FiLE ersetzt, sondern hintendrangeschrieben. Was wieder zu Unordnung und Verwirrung führt.

Habs auch per Batchfile versucht und mir die Zähne dran ausgebissen. Nun hab ich echt kein Bock mehr...

Das Batch sieht wie folgt aus:

  if "%1"=="" goto hilfe  
    if "%1"=="/?" goto hilfe  
    if "%1"=="?" goto hilfe  
    if "%1"=="-?" goto hilfe  
    if "%1"=="help" goto hilfe  
    if "%1"=="--help" goto hilfe  
    if "%1"=="/help" goto hilfe  

    goto argchk


:hilfe
    echo Dieses BatchFile sollte immer mit Befehlserweiterungen gestartet 
    echo werden, ansonsten werden bestimmte Zeichenfolgen falsch inte-
    echo pretiert. siehe dazu "cmd /?"  
    echo -----------------------------------------------------------------
    echo Syntax:
    echo varedit [Variablenname] [String] [d] [m]
    echo -----------------------------------------------------------------
    echo Option d:  String wird aus Variable geloescht.
    echo Option m:  String wird als Systemvariable hinzugefuegt/geloescht.
    echo            ohne diese Option wird der String standardmaessig fuer
    echo            den Benutzer gesetzt.
    echo            Hier nur Kleinbuchstaben verwenden.
    echo -----------------------------------------------------------------
    echo Es kann auch der Inhalt einer anderen Umgebungsvariable als 
    echo String uebergeben werden. Diese sollte dann wegen der NameSpaces
    echo in Anfuehrungszeichen stehen (siehe Beispiel 2).
    echo 
    echo Wenn eine Variable IMMER mit einer anderen Variablen gleich sein
    echo soll, muss statt "%%" das Zeichen "~" zu Beginn und am Ende ge-  
    echo setzt werden. Wenn VAR1=%%VAR2%% ergeben soll (siehe Beispiel 3).
    echo -----------------------------------------------------------------
    echo Wert zur USER-Umgebungsvariable hinzufuegen:
    echo Beispiel1: varedit LM_LIC_FILE C:\test 
    echo Beispiel2: varedit HOME "%%USERPROFILE%%"  
    echo Beispiel3: varedit HOME "~USERPROFILE~"  
    echo -----------------------------------------------------------------
    echo Wert aus USER-Umgebungsvariable loeschen (Argument d anfuegen!):
    echo Beispiel1: varedit LM_LIC_FILE C:\test d
    echo Beispiel2: varedit HOME "%USERPROFILE%" d  
    echo -----------------------------------------------------------------
    echo Wert zur SYSTEM-Umgebungsvariable hinzufuegen (Arg. m anfuegen!):
    echo Beispiel1: varedit LM_LIC_FILE C:\test m 
    echo Beispiel2: varedit HOME "%%USERPROFILE%%" m  
    echo -----------------------------------------------------------------
    echo Wert aus SYSTEM-Umgebungsvariable loeschen (Argument d anfuegen!)
    echo Beispiel1: varedit LM_LIC_FILE C:\test d m
    echo Beispiel2: varedit HOME "%USERPROFILE%" m d  
    echo -----------------------------------------------------------------
    
    goto fin




:argchk

    set stat=
    set tmp0=
    set tmp1=

    set tmp0=%1
    set tmp1=%2

rem Anfuehrungszeichen aus tmp1 entfernen
rem Wird nur in der "echten" Dos Box benoetigt, die CCM Konsole intepretiert diese nicht  
rem daher ist der Befehl auskommentiert
rem set tmp1=!tmp1:"=!  

    if "%3"=="m" set stat=m  
    if "%4"=="m" set stat=m  
    if "%3"=="d" goto delvar  
    if "%4"=="d" goto delvar	  




:addvar

rem falls Argument %2 schon existiert, rausloeschen -> keine doppelten Eintraege!

    if not "!%tmp0%!"=="" set %tmp0%=!%tmp0%:%tmp1%=!  
 rem   if not "!%tmp0%!"=="" set %tmp0%=!%tmp0%:~=!  
 rem   if "!%tmp0%:%%!"=="=" set %tmp0%=!%tmp0%:~1,256!  
 rem   if "!%tmp0%:%!"==  


rem Argument %2 setzen

    set %tmp0%=!%tmp0%!;%tmp1%

    echo INFO:
    echo ------------------------------------
    echo Der String "%tmp1%" wurde der    
    echo Umgebungsvariable "%tmp0%" hinzugefuegt.  

goto start1




:delvar

rem "" entfernen  
    set tmp1=!tmp1:"=!  
    set tmp1=!tmp1:"=!  

rem Argument %2 loeschen
    set %tmp0%=!%tmp0%:%tmp1%=!

    echo INFO:
    echo ------------------------------------
    echo Der String "%tmp1%" wurde aus der    
    echo Umgebungsvariable "%tmp0%" geloescht.  




:start1

rem Befehl doppelt, falls 3 mal ";" in der VAR vorkommen sollten  

    set %tmp0%=!%tmp0%:;;=;!
    set %tmp0%=!%tmp0%:;;=;!
    set %tmp0%=!%tmp0%:"=!  
    set %tmp0%=!%tmp0%:"=!  

:loop1

rem Falls am Anfang ein ";" oder "="steht -> löschen  

    if "!%tmp0%:~0,1!"==";" set %tmp0%=!%tmp0%:~1,256!  
    if "!%tmp0%:~0,1!"==";" goto loop1  
    if "!%tmp0%:~0,1!"=="=" set %tmp0%=!%tmp0%:~1,256!  
    if "!%tmp0%:~0,1!"=="=" goto loop1  
    if "!%tmp0%!"==";" set %tmp0%=  
    if "!%tmp0%!"=="=" set %tmp0%=  

    if "%stat%"=="m" goto machine  




rem in der "echten" DOS Box muesste der Befehl so lauten:  
rem setx %tmp0% !%tmp0%!
    setx %tmp0% "!%tmp0%!"  

rem Leere Eintraege rauskicken:
    if "!%tmp0%!"=="" regdat3 -d varu.txt  

    echo ------------------------------------
    echo Die User-Variable "%tmp0%" wurde mit setx dauerhaft gesetzt.  
    echo ------------------------------------
    goto end




:machine

rem in der "echten" DOS Box muesste der Befehl so lauten:  
rem setx %tmp0% !%tmp0%! -m


    setx %tmp0% "!%tmp0%!" -m  

rem Leere Eintraege rauskicken:
    if "!%tmp0%!"=="" regdat3 -d varm.txt  

    echo ------------------------------------
    echo Die SystemVariable "%tmp0%" wurde mit setx dauerhaft gesetzt.  
    echo ------------------------------------




:end

    if not errorlevel 1 goto allesok
    echo Bei der Verarbeitung sind Fehler aufgetreten!
    echo ------------------------------------

:allesok
    echo Keine Fehler bei der Verarbeitung.
    echo ------------------------------------
:fin

Wie auch immer, das Batchfile läuft nicht ganz rund. Irgendwo sind (Denk)Fehler drin. Das ersetzen klappt nicht ganz, wenn der Eintrag schon existiert.


Ich suche also ne Software/Tool, das auf commandline Basis, wie auch immer, mir nen Registrywert oder die Umgebung (sollte schon die User und/oder Systemvariable x editierbar sein) neu erstellen, bearbeiten, ersetzten und löschen kann.

Hab auch schon versucht in C++ was zu machen, bin aber auch dort gescheitert, weil ich es bisher nicht geschafft habe nen Registrywert sauber zu schreiben.
Hinweis:
Machineenvironment liegt unter:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
Userenvironment liegt unter:
[HKEY_CURRENT_USER\Environment]


Vielleicht gibts ja unter Euch einige Freaks die das in 10-20 Minuten hinbekommen. Ich hab mir bisher die Zähne ausgebissen. Und bin immernoch nicht richtig weiter face-sad
Vielleicht habt Ihr auch ein Tool das die Sache erledigen kann.

Ich wär Euch auf jeden Fall sehr sehr dankbar.


Grüße,

jackson

Content-Key: 16537

Url: https://administrator.de/contentid/16537

Printed on: May 6, 2024 at 11:05 o'clock

Member: Biber
Biber Sep 22, 2005 at 15:22:12 (UTC)
Goto Top
Nachfrage:
- Was ist denn regdat3 ( der mit varM.txt bzw. varU.txt als Parameter gerufen wird?) Auch ein Batch?
Sollte dieser Job nicht auch hier in diesem Batch stattfinden? Dass ist ja megafehlerträchtig (hey - neue Wortschöpfung. ganz unabsichtlich)
- Zweite Frage: Hältst Du es wirklich für sinnvoll, weiterzuwerkeln, BEVOR Du dich nun entschieden hast, ob Du
a) diese Aufgabe im InstallScript abfackelst (also wahrscheinlich Dich ausschließlich auf Reg-Updaterei beschränkst)
b) davon ausgehst, dass das eh nicht klappt und Dir so ein Umgebungsvariablen-Live-Updater bastelst?

Ich bastele gerne mit, aber das Ziel der Reise ist mir noch nicht ganz klar...

Und ein paar Randfragen wären auch noch da..
- Die Clients sind ausschließlich XP /W2K und höher?
- Reg.exe und setx.exe können im Path vorausgesetzt werden?
- was ist denn "echtes DOS" und was eine "CCM-Console"?

Interessiert
Frank / der Biber aus Bremen
Member: hudson
hudson Sep 28, 2005 at 13:45:10 (UTC)
Goto Top
Hi Frank,

zunächst mal vielen Dank für Dein Interesse. War in Urlaub, deshalb erst heute die Antwort.


Also regdat3.exe ist sowas ähnliches wie reg.exe kann im Prinzip das gleiche, nur mit ner anderen Syntax. Ok, an diesem BatchFile ist schon wild rumgebastelt worden, eigentlich wollte ich eher zur Reg.exe greifen, weil die eher verbreitet ist und mehr kann. Im Installscript wird vorher geschaut ob reg/setx im System32 Directory liegen, wenn nicht werden sie dort reinkopiert.

Zur zweiten Frage: Ich würde es am liebsten per Batchfile machen. Weil im Installskript so eine Art Dos Umgebung (damit ist die CCM-Console gemeint) existiert. Die CCM-Konsole gleicht eigentlich der Dos-Konsole, mit dem einzigen Unterschied, das das Environment spezifisch ist, also die Umgebungsvariablen anders als unter Dos gesetzt sind. man hat noch einige zusätzliche Befehle, die spielen allerdings für dieses Prob keine große Rolle.
Ich gehe schon davon aus, das es mit Batch möglich ist dieses Problem zu lösen.

Ich versuche Dir mal ein Beispiel zu erläutern, damit Dir das Ziel klarer wird:

-Wir haben hier einen FlexLM Server laufen, aufdem z.B alle Lizenzen von Rational-Software laufen.
-Als Beispiel soll Rational Clearcase und Rational Rose gleichzeitig auf einer Workstation laufen.
-Damit beide SW´s korrekt starten muss ich eine Uservariable beim client setzen, die z.b so aussieht: LM_LICENSE_FILE=7192@server1;7190@server1; (In Realität stehen bis zu 20 Einträge in diesem File, weil fast jedes unserer SW-Pakete seine Lizenz über FlexLM holt)
-erster Eintrag bezieht sich auf Clearcase, zweiter Eintrag auf Rose (in diesem einfachen 2er Beispiel)
-Wenn ich die Variable per Installscript setze und beide SW-Pakete nacheinander installiere, steht am Ende nur folgender Eintrag da: LM_LICENSE_FILE=7190@server1, weil die SW zu "dumm" ist und sich einfach reinklatscht ohne vorher nachzusehn ob schon was drin steht. Also will ich im Installscript gar nix machen und einfach jeweils nach dem script das batchfile aufrufen und den eintrag "selbst" vornehmen.
-Also deaktiviere im Installscript ein automatisches "LM_LICENSE_FILE - setzen", damit ich es per Batch selbst machen kann
-Das Batchfile soll von der Syntax so gehalten werden wie in der hilfe oben zu sehen ist. also "varedit [Variablenname] [String] [d] [m]"
-Das Batchfile muss schlau genug sein zu erkennen, das der eingegebene Wert schon existiert und in diesem Fall ihn ersetzen oder gar nix tun: wenn also vorher drin steht LM_LICENSE_FILE=7192@server1;7190@server1 und ich installiere Clearcase nochmal drüber, muss es nach batch aufruf immernoch genauso aussehen: LM_LICENSE_FILE=7192@server1;7190@server1;
und nicht etwa LM_LICENSE_FILE=7192@server1;7190@server1;7192@server1;
-Das löschen der Werte sollte ebenfalls möglich sein, damit ich nach dem UninstallScript das Batchfile aufrufe und den eintrag sauber rauslösche.

Im Grunde gibt es also folgende Parameter mit dem Aufruf der Batchdatei:
-VariablenName [Variablenname] (in diesem Fall LM_LICENSE_FILE)
-Wert [String]
-Wert hinzufügen bzw. herauslöschen [d]
-Das ganze als Uservariable oder als Systemvariable setzen [m]

-Die Variable sollte natürlich neu angelegt werden, falls sie noch nicht existiert (z.B bei einem FreshInstall eines PCs und erster Software) und natürlich gelöscht werden, falls sie leer ist (also keinen Wert besitzt).

-Im Prizip muss man im Inhalt der Variablen nach den Semikola(?) suchen und danach die aufsplittung vornehmen


-Wir haben hauptsächlich XP/win2k clients. Es gibt auch einige NT4.0-Clients, bin aber froh wenn es erstmal "nur" unter XP/win2k geht. Weil reg.exe nicht unter NT4 läuft, oder?


Hoffe Deine Fragen einigermassen geklärt zu haben und das Dir nun das Ziel klarer erscheint.


Gruß, hudson
Member: Biber
Biber Sep 28, 2005 at 14:25:02 (UTC)
Goto Top
Moin, hudson,

danke für die Rückmeldung.

Ist jetzt schon ein bisschen klarer, was der Batch machen soll.

Jetzt muss ich das aber erst mal in Ruhe anschauen, wenn mein Drecksladen mal wieder in den Zustand kommen sollte, dass es hier kurz ein paar Minuten ohne mein Händchenhalten läuft *fluch-wie-ein-Rohrspatz*

Aber ich wollte nicht ablenken.. hat ja mit eurem Problemchen nichts zu tun..

Also .. über zwei Sachen bin ich eben beim Überfliegen gestolpert und spiel den Ball noch mal retour:
1) Reg.exe läuft IMO auch unter NT40 ..das war doch zuerst mit im NT-Resorce-Kit, dachte ich?
Kann ich hier nicht prüfen - so antike Geräte haben wir nicht mehr *lüüüüüüüüüüüüüüg-ohne-rotzuwerden
2) Warum Du das ganze NICHT über das Installscript abfackeln willst, hab ich immer noch nicht verstanden.
Wäre eher mein Ansatz gewesen... im Installscript hab ich alle Infos, alle Rechte, alle Tools..
ich hätte es zu vermeiden versucht, mich da nochmal ähnlich in die Nesseln zu setzen wie es M$ mit diesen Pathman.exe und Setx-Tools geschafft hat (das sind ja auch solche Live-Environment-Updater). Das kann schnell ausufern (vergl. die Un-Bedienbarkeit dieser beiden genannten Tools). Aber egal - machbar ist es.

Ich schau mir das mal an in Ruhe.

Frank / der Biber aus Bremen
Member: hudson
hudson Sep 28, 2005 at 15:25:06 (UTC)
Goto Top
Hi Frank,

ja, das mit dem Zeitmangel kenne ich nur allzugut face-wink

also das mit reg.exe wär ja prima... dann gehts auch unter NT. Ist aber auch nit schlimm wenns net läuft.

Zum 2ten Anliegen: also vielleicht verstehen wir unter "Installscript" was unterschiedliches - bei mir siehts so aus:
mittels CCM wird ein script ausgeführt, wo die setup.exe zu jeder software unter einem Admin-account aufgerufen wird und quasi jeder klick auf die ganze installationsroutine angewendet wird.
Ich erstelle ein Scipt indem ich so ein ccm - recording - tool starte, und das setup einmal durchsteppe. dann werden alle geklickten buttons und aktionen in ein script abgelegt. (also es ) Bei der installation wird das script aufgerufen und das setup automatisch unter verwendung des zuvor erstellten scripts durchgesteppt.
Das verstehe ich als Installationsskript. Das ganze läuft in der CCM-Konsole und natürlich möchte ich nach dem das Setup mit seinem Installscript durchgelaufen ist, das Batchfile mit den nötigen Parametern einbauen um alles komplett automatisch abwickeln zu können.
Verstehe nicht ganz was Du im 2ten Absatz meinst - Alle Rechte hab ich ja - das Script wird ja unter Adminrechten durchgeführt. Wenn dieser dann ja das Batchfile aufruft klappt ja alles. Auf pathman und setx möchte ich wennmöglich verzichten. reg.exe macht es ja ganz gut und hat so einige nette features wie compare, export, import .... man könnte damit vielleicht den aktuellen staus der variable in ein textfile exportieren, darin rumeditieren lassen und dann wieder importieren. ach - nee sind ja files im .reg format, seh ich grad.


Danke fürs anschaun face-wink

Gruß Martin