Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Registry - Programm Version auslesen

Frage Entwicklung Batch & Shell

Mitglied: BKAMk2

BKAMk2 (Level 1) - Jetzt verbinden

19.02.2008, aktualisiert 13.07.2008, 10680 Aufrufe, 7 Kommentare

Hallo ihr Administratoren,

ich habe folgendes Problem:

Ich soll eine Batch Datei schreiben, die mir in der Registry nach einem bestimmten Programm sucht und mir sagt welche Version dieses Programm hat.
Bis jetzt bin ich so weit gekommen, dass mir die insallierten Programme ausgegeben werden.

Nur ab da komme ich nicht weiter.

Wäre Super wenn ihr mir Helfen könntet!

01.
FOR /F "usebackq" %%i IN (`reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products`) DO ( 
02.
 
03.
reg query "%%i\InstallProperties" /v DisplayName 
04.
 
05.
 
06.
07.
 
08.
pause
Jetzt soll quasi die ausgegebene Liste nach einem bestimmten Programm durchsucht werden und mir die Versionsnummer ausgeben.

Ist das zu realisieren?

Danke schonmal.

MfG
BKAMk2
Mitglied: stbewo
19.02.2008 um 08:55 Uhr
Hi BKAMk2,

es geht auch einfacher. Falls Du XP Pro SP2 hast dann mit.

WMIC /OUTPUT:Software.htm Product get name,version /FORMAT:hform

Hiermit bekommst Du eine HTML Liste mit Programmname und Versionsangabe.

Oder mit

FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO (
Rem %%B = Programmname, %%C = Version
Echo "%%B" "%%C"
)

Gruß
Stefan
Bitte warten ..
Mitglied: BKAMk2
19.02.2008 um 09:09 Uhr
Das Problem ist nur das aus der Batch-Datei ein Installer gestartet werden soll, wenn eine veraltete Version des Programmes eingetragen ist.

Aber danke schonmal für den tipp.

€dit:

Hab gesehen das du noch einen weiteren Vorschlag gepostet hast.
Funktioniert leider auch nicht.

Also es ist recht schwierig zu erklären, was wir genau vorhaben.

Es soll in der Registry nach einem bestimmten Programm gesucht werden und die Versionsnummer überprüft werden.
Die Versionsnummer wird in der Batch durch einen
01.
SET version=VERSIONSNUMMER 
festgelegt.

Sollte die Versionsnummer nicht mit der in der Batch übereinstimmen, wird eine zweite Batch gestartet, die eine Installationsroutine startet. Dadurch wird der Wert in der Registry gleich aktualisiert.

Das Problem an der Sache ist, das Windows in der Registry unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\"
sehr eigenwillig und per Zufall (scheint mir) generierte Schlüssel ablegt.

Und da wir nicht wissen können in welchem Schlüssel die Versionummer steht müssen wir alle durchsuchen.
Und damit nicht jedes Programm eine Installation startet muss der Name auch verglichen werden.

Ich hoffe ich habe jetzt nicht jeden entmutigt.

Wo steckt der Bieber eigentlich?
Bitte warten ..
Mitglied: Biber
19.02.2008 um 11:00 Uhr
Moin BKAMk2,

bei mir würde folgende Mimik am CMD-Prompt zum (Teil-)Erfolg führen:
[Eingabezeilen beginnen mit ">"]
01.
>Set "suchname=MetaFrame Presentation Server Client" 
02.
>SET "rootkey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products" 
03.
>for /f %i in ('reg query "%rootkey%"') do @For /f "tokens=2,*" %j in ('reg query "%i\InstallProperties" /v Displayname ^2^>nul ^|find "Displayname"') do @if "%k"=="%suchname%" for /f "tokens=2,*" %a in ('reg query "%i\InstallProperties" /v DisplayVersion^|find "Version"') do @echo %k: %b 
04.
MetaFrame Presentation Server Client: 9.230.50211
Im Batch sähe das formatiert in etwa so aus:

01.
 @echo off & setlocal 
02.
Set "suchname=MetaFrame Presentation Server Client" 
03.
Set "rootkey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products" 
04.
 
05.
for /f %%i in ('reg query "%rootkey%"') do ( 
06.
    For /f "tokens=2,*" %%j in ('reg query "%%i\InstallProperties" /v Displayname ^2^>nul ^|find "Displayname"') do ( 
07.
      if "%%k"=="%suchname%" ( 
08.
         for /f "tokens=2,*" %%a in ('reg query "%%i\InstallProperties" /v DisplayVersion^|find "Version"') do set "version=%%b" 
09.
10.
))       
11.
 
12.
Echo Ermittelte DisplayVersion für [%suchname%]: [%version%]
[ungetestet]

Natürlich ist es so etwas hakelig an zwei Stellen:
1) Man/frau muss den exakten "Displaynamen" wissen.
2) die DisplayVersion-Formatierung ist seeeeeeehr frei in der Gestaltung. Bzw. in der Darstellung.

Ich würde erstmal mit diesem Ansatz versuchen, wie weit ihr damit bei Eurem speziellen Fall kommt.
Ggf. müssen wir dann noch mal ein Brainstorming über eine andere Strategie machen.

Grüße
Biber
Bitte warten ..
Mitglied: stbewo
19.02.2008 um 11:02 Uhr
Ich habe es jetzt einmal mit Versionsnummer angepasst.

setlocal enabledelayedexpansion
SET Versionsnummer=1.0
FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO (
set "Program=%%B"
set "Version=%%C"
if "!PROGRAM!"=="Photo Editor" (
if "!VERSION:~0,-1!"=="%versionsnummer%" echo "!PROGRAM!" "!VERSION:~0,-1!"
)
rem Anzeige aller Programme "REM" entfernen.
rem echo "!PROGRAM!", "!VERSION:~0,-1!"
)

Gruß
Stefan
Bitte warten ..
Mitglied: BKAMk2
20.02.2008 um 13:34 Uhr
So hat jetzt Funktioniert.
Bin euch echt zu tiefsten Dank verpflichtet.

Hier nochmal der Finale Code:
01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
SET versionsnummer=1.6 
04.
set "found=0" 
05.
FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO ( 
06.
set "Program=%%B" 
07.
set "Version=%%C" 
08.
if "!PROGRAM!"=="WinRar" ( 
09.
set "found=1" 
10.
if not "!VERSION:~0,-1!"=="%versionsnummer%" call \\server1\update.bat 
11.
if "!VERSION:~0,-1!"=="%Versionsnummer%" echo OK! 
12.
13.
14.
15.
rem Anzeige aller Programme "REM" entfernen. 
16.
rem echo "!PROGRAM!", "!VERSION:~0,-1!" 
17.
IF "!found!"=="0" call \\server1\install.bat
Nochmals vielen Dank!

MfG
BKAMk2
Bitte warten ..
Mitglied: stbewo
20.02.2008 um 15:13 Uhr
Um es noch etwas einfacher zu machen.

SET ProgVers=6.6.0.8
SET Programm=Nero
FOR /F "tokens=1,2 skip=1 delims= " %%A IN ('"WMIC product where (Name='%Programm%' and version='%ProgVers%') get name,version"') DO (
Echo Programm = %%A Version = %%B
)

Damit bekommst Du nur die Programme zurück, die der Abfrage entsprechen. Du musst aber vorher wissen nach was man sucht. Die Vorgehensweise kennst Du jetzt mit WMIC.

Gruß
Stefan
Bitte warten ..
Mitglied: BKAMk2
20.02.2008 um 15:44 Uhr
Er zeigt mir doch jetzt garnix mehr an.
Was er jetzt macht entspricht auch vollkommen dem was er machen sollte.
Er prüft ob die Software installiert ist. Wenn ja überprüft er die Version.
Sollte die Versionsnummer anders sein als erwünscht startet er ein Update.

Sollte die Software nicht installiert sein startet er eine Installationsbatch.

Aber vielen Dank. Ich denke alleine wäre ich nie auf die WMIC gekommen

Selbst mein Ausbilder war erstaunt was es nicht alles gibt
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Variable per Batch auslesen und in Registry schreiben (1)

Frage von Zendara zum Thema Batch & Shell ...

Festplatten, SSD, Raid
gelöst Windows 7 Pro x64 Key aus einer (fast) kaputten HDD auslesen (7)

Frage von carbon1X zum Thema Festplatten, SSD, Raid ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Batch & Shell
Skripterstellung Lehrling (22)

Frage von 133119 zum Thema Batch & Shell ...

Windows Userverwaltung
gelöst Wie verfahrt Ihr mit den Windows-Benutzerkonten und -dateien von ausgeschiedenen Mitarbeitern? (14)

Frage von Bl0ckS1z3 zum Thema Windows Userverwaltung ...

Exchange Server
Microsoft Exchange Weiterleitung mit anderer primären E-Mail Adresse (14)

Frage von Rene12345 zum Thema Exchange Server ...

LAN, WAN, Wireless
Devolo DLAN 500 pro Wireless+ (13)

Frage von IceAge zum Thema LAN, WAN, Wireless ...