przigoda
Goto Top

Registry mittels Batch auslesen

Hallo,

da ich mich hier neuangemeldet habe, bitte ich um Verzeihung falls die Kategorie doch nicht ganz passen sollte. Ich habe hier schon viele Lösungen für kleine Probleme gefunden, daher erstmal ein dickes Lob an alle die hier so fleißig antworten!!!

ich habe dank einigen Beiträgen hier mein Problem schon sehr weit lösen können, es gibt jedoch noch einige "unschöne Stellen" und nicht alllgemein funktionierende Dinge:

Ich möchte die aktuelle inst. Version von Adobe Acrobat ermitteln, und die SID des akt. Benutzers:

Bisher mache ich dies so:

@cd "%userprofile%\Lokale Einstellungen\Anwendungsdaten\Microsoft\Credentials"  
@FOR /F "tokens=*" %%i IN ('dir /A:D /B') do (SET sid=%%i)  

gibt es hierfür auch eine schönere Möglichkeit, insbesondere bei engl. Windows gibt es "Lokale Einstellungen" schließlich nicht?

und weiter

@Set /A Line=0
@for /F "delims=\ tokens=*" %%i in ('REG QUERY "HKEY_USERS\%sid%\Software\Adobe\Adobe Acrobat" /s') DO (     
@   set /a Line+=1 
@   echo %%i>> %Temp%\info.txt
@   REM if %Line% GEQ 4 GOTO LineReadEnd
@)
@:LineReadEnd

Ich will eigentlich nur wissen welche Unterordner in HKEY_USERS\%sid%\Software\Adobe\Adobe Acrobat existieren, dafür speicher ich allerdings zunächst die gesamte Sub-Reg in die info.txt und ich ich brauche eigentlich nur die 3. zeile aus der Reg. Ich schaffe es allerdings nicht mittels if einen Sprung zu setzen, der wird einfach ignoriert, daher habe ich den einkommentiert.
Ein Weiteres mögliches Probleme könnte die Installation von verschiedenen Adobe Acrobat Versionen sein, z.B. hat die 7.0 nach der Deinstallation bei mir noch Reste hinterlassen so, dass der Reg-Eintrag nicht zu Adobe 8.0 sondern 7.0 hinzugefügt wurde. Ich musste den 7.0 Ordner erstmal löschen, damit es funktionierte.

Ich habe über sie Suchfunktion auch eine andere Möglichkeit zum auslesen der Versionsnummer gefunden und zwar
WMIC product get...
nur kriege ich dann bei Adobe Acrobat nur "Programm = Adobe Version = Acrobat" aber ich keine Versionsnummer.

So ich hoffe ist ausführlich genug beschrieben, falls nicht ergänze ich natürlich noch...
vielen Dank für eure Hilfe im voraus.

gruß Nils

Content-ID: 90926

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

60730
60730 30.06.2008 um 12:00:02 Uhr
Goto Top
Servus und Willkommen face-wink

Von einem unserer Batchgurus hab ich folgenden Trick gelernt:

help /? > temp.txt
find "Befehl" tempt.txt  
if %errorlevel% ==0 goto german
find "command" tempt.txt  
if %errorlevel% ==0 goto eng

:german
:eng

Früher hab ich das mit
if exist "%userprofile%\Lokale Einstellungen\Anwendungsdaten\" goto german  
if exist "%userprofile%\Local Settings\Application Data\" goto eng  
gelöst.

Zum anderen,
ich hab ein Kixscript, das jeden kleineren Acrobat Key löscht, wenn Version 8 gefunden wird.

:Acrobat8
	if existkey( "HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\8.0\" ) ="0"  
		?"Acrobat8  wurde gefunden "  
		Deltree ( "HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\5.0" )  
		Deltree ( "HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\5.1" )  
		Deltree ( "HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\7.0" )  

         	else
		? "Adobe Acrobat 8 nicht gefunden"  
		
	endif

Und wegen der SID - von Sysinternals gibts das schöne Tools psgetsid.exe face-wink
gruß
bastla
bastla 30.06.2008 um 12:09:28 Uhr
Goto Top
Hallo Przigoda und willkommen im Forum!

Als Alternative für das Auslesen der SID könntest Du folgenden Batch einsetzen:
@echo off & setlocal
set G=%temp%\GetSID.vbs
echo Set net=CreateObject("WScript.Network"):WScript.Echo GetObject("winmgmts:\\.\root\cimv2").Get("Win32_UserAccount.Name='"^&net.UserName^&"',Domain='"^&net.UserDomain^&"'").SID>%G%  
for /f %%i in ('cscript //nologo %G%') do set "SID=%%i"  
echo %SID%
Da hier eine WMI-Abfrage (über ein integriertes VBScript) erfolgt, sollte die BS-Sprache eigentlich kein Problem sein - schneller ist aber sicherlich Deine bisher verwendete Variante.

Allerdings frage ich mich, warum Du nicht über HKCU zugreifst (was ich im Beispiel unten mache).
Zu Teil 2:
Vermutlich ist es ohnehin sicherer, anstelle von "Zeile 3" einen Suchbegriff vorzugeben (zB "Acrobat\") daher:
for /f "tokens=5 delims=\" %%i in ('REG QUERY "HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat" /s^|findstr /c:"Acrobat\\"') do set "AcrobatVersion=%%i"  
echo %AcrobatVersion%
Auf diese Art solltest Du (aufgrund der Sortierung innerhalb der Registry) auch die höchste Versionsnummer erhalten ...

Grüße
bastla

P.S.: @timobeil
Von einem unserer Batchgurus ...
Es gibt hier ohnehin nur den einen ...
stollkuehn
stollkuehn 30.06.2008 um 12:16:15 Uhr
Goto Top
Hi,

um das Problem zu lösen, die SID mit dem Usernamen zu matchen, nehme ich immer User2SID oder SID2User. Beides kleine Executables, die hervorragend in ein Batch integriert werden können.

Gruß

Osik
Przigoda
Przigoda 30.06.2008 um 20:48:36 Uhr
Goto Top
Besten Dank für die schnellen Antworten!!! Hatte heute leider keine Zeit mehr das nochmal zu optimieren, werde mich gleich noch oder eher morgen daran setzen und das mal umsetzen!!!und dann noch kurz Rückmeldung geben


---edit---
so ich habe all eure gute Vorschläge jetzt mal zusammengefügt und eine 15 zeilige Lösung erhalten, vorher waren noch über 30, und das ganze geht auch wesentlich schneller und scheinbar auch unter engl. Systemen!
Ich bedanke mich nochmal für eure schnelle Antworten und guten Ideen, die Umsetzung bei mir musste leider etwas warten...

@REM Erstelle SID als Variable
@%~d0%\tools\user2sid.exe %username% > sid.txt
@FOR /f "delims=: tokens=1,*" %%i in ('findstr /n $ %TEMP%\sid.txt') do @If %%i EQU 2 @Set SID=%%j  

@REM Finde Adobe Acrobat Version heraus
@for /f "tokens=5 delims=\" %%i in ('REG QUERY "HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat" /s^|findstr /c:"Acrobat\\"') do set "AcrobatVersion=%%i"   

@reg add "HKEY_USERS\%SID%\Software\Adobe\Adobe Acrobat\%AcrobatVersion%\...  
@del "%TEMP%\sid.txt"