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, 10527 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.

Mit freundlichen Grüßen
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!

Mit freundlichen Grüßen
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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Windows 10
Windows 10: Version 1607 jetzt im Current Branch for Business

Link von Penny.Cilin zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

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

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...