Top-Themen

Aktuelle Themen (A bis Z)

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

VBScript - Array gezielt abfragen

Frage Entwicklung VB for Applications

Mitglied: appleseed

appleseed (Level 1) - Jetzt verbinden

06.12.2007, aktualisiert 08.12.2007, 5732 Aufrufe, 3 Kommentare

Hallo,

mit folgendem Script ist es mir möglich, die Registrierung nach installierter Software auf einem PC abzufragen:


01.
Const HKCR = &H80000000 
02.
Const HKCU = &H80000001 
03.
Const HKLM = &H80000002 
04.
 
05.
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & ".\root\default:StdRegProv") 
06.
 
07.
sUninstallPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 
08.
 
09.
oReg.EnumKey HKLM, sUninstallPath, aSubkeys 
10.
 
11.
On Error Resume Next 
12.
For Each sSubkey In aSubkeys 
13.
oReg.GetStringValue HKLM, sUninstallPath & "\" & sSubkey, "DisplayName", 
14.
sAppName 
15.
WScript.Echo sAppName 
16.
Next

Ich möchte nun dieses Array auf Vorhandensein einer bestimmten Software abfragen um im Anschluß die Software ggf. zu installieren. In der WMI Klasse "WIN32_Product" wird die Software leider nicht gelistet - hier wäre bei Vorhandensein die Abfrage einfacher:

01.
strComputer = "." 
02.
 
03.
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
04.
Set colItems = objWMIService.ExecQuery ("Select * from Win32_Product WHERE Name = 'Name der Software'") 
05.
Set objWshShell = WScript.CreateObject("WScript.Shell") 
06.
 
07.
strInstall = "Installationsbefehl" 
08.
 
09.
If colItems.Count <1 Then 
10.
	objWshShell.Run strInstall, 0, True 
11.
End If
Vielen Dank für Eure Hilfe.
Torsten
Mitglied: bastla
06.12.2007 um 16:09 Uhr
Hallo appleseed!

Soferne ich Dich richtig verstehe, willst Du den ausgelesenen "sAppName" auf den Namen einer bestimmten Software hin untersuchen. Am Beispiel von "Opera" könnte das so aussehen:
01.
Const SW = "Opera" 
02.
Const HKCR = &H80000000 
03.
Const HKCU = &H80000001 
04.
Const HKLM = &H80000002 
05.
 
06.
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & ".\root\default:StdRegProv") 
07.
 
08.
sUninstallPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 
09.
 
10.
oReg.EnumKey HKLM, sUninstallPath, aSubkeys 
11.
 
12.
iSWLen = Len(SW) 
13.
sSW = LCase(SW) 
14.
 
15.
On Error Resume Next 
16.
For Each sSubkey In aSubkeys 
17.
	oReg.GetStringValue HKLM, sUninstallPath & "\" & sSubkey, "DisplayName",sAppName 
18.
	If Left(LCase(sAppName), iSWLen) = sSW Then WScript.Echo sAppName 
19.
Next
Verglichen wird jeweils nur der Anfang des gelesenen SW-Namens, wobei durch die Verwendung von LCase() die Unterscheidung Groß- / Kleinschreibung aufgehoben wird. Damit die Umwandlung und Längenbestimmung für den Suchbegriff nicht bei jedem Schleifendurchlauf erfolgt, werden die entsprechenden Werte bereits vor der Schleife ermittelt.

Grüße
bastla
Bitte warten ..
Mitglied: appleseed
08.12.2007 um 08:59 Uhr
Hallo bastla,

vielen Dank für Deine Hilfe, aber es ist nicht ganz das, was ich suche. Den exakten Namen der Software kenne ich ja bereits. Das Problem ist nur, ich muss die Installation der Software zur Ausführung bringen, wenn sie in dem Array nicht vorhanden ist. Und hier liegt das Problem - bei einigen hundert Installationen würde die Installationsanweisung jedes mal aufgerufen, wenn die If-Anweisung den Namen nicht findet.

Ich hab's jetzt so gelöst:

01.
For Each sSubkey In aSubkeys 
02.
oReg.GetStringValue HKLM, sUninstallPath & "\" & sSubkey, "DisplayName", sAppName 
03.
	Select Case sAppName 
04.
		Case "Name der Software" 
05.
		counter = counter + 1 
06.
	End Select 
07.
Next 
08.
 
09.
If counter < 1 Then 
10.
	'Aktion: "Software muss noch installiert werden" 
11.
	Else 
12.
	'Aktion: "Software ist bereits installiert" 
13.
End If
Gruß

Torsten
Bitte warten ..
Mitglied: bastla
08.12.2007 um 10:29 Uhr
Hallo appleseed!

Sorry - für mich hatte es eher danach geklungen, als ob das Vergleichen das Problem wäre ...

Noch zwei Anmerkungen:

Eine eher "kosmetische" Sache: Was Du eigentlich brauchst, ist ein Schalter (flag), aus dessen Zustand nach der Schleife ersichtlich ist, ob die Software gefunden wurde. Dein Zähler tut's natürlich auch, aber da die Anzahl eigentlich ohnehin nur 0 oder 1 ergeben sollte, kannst Du den Rechenschritt einsparen.

Zum Thema "Einsparen" allerdings ein weiterer Vorschlag: Sobald das gesuchte Programm gefunden wurde, ist es nicht mehr nötig, die weiteren ausgelesenen Programmnamen zu vergleichen.

Das Ganze sähe dann etwa so aus:
01.
bFound = False 
02.
For Each sSubkey In aSubkeys 
03.
oReg.GetStringValue HKLM, sUninstallPath & "\" & sSubkey, "DisplayName", sAppName 
04.
	If sAppName = "Name der Software" Then 
05.
		bFound = True 
06.
		Exit For 
07.
	End If 
08.
Next 
09.
 
10.
If Not bFound Then 
11.
	'Aktion: "Software muss noch installiert werden" 
12.
	Else 
13.
	'Aktion: "Software ist bereits installiert" 
14.
End If
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Probleme mit Array in vbscript
gelöst Frage von BadFsaadKlBatch & Shell13 Kommentare

Hallo zusammen, ich habe mal wieder ein Problem, bei einem Vergleich / Update zweier Files mittels vbscript, und hohhe ...

PHP
Mit PHP SQL Array Abfrage
gelöst Frage von gamerffPHP3 Kommentare

Hallo Forum, ich bin grade an einem Projekt dran ein Telefonbuch mit Mysql, PHP und HTMl zu erstellen. Ich ...

Windows Netzwerk
Gezielt nach MAC-Adresse im DHCP suchen
gelöst Frage von BuffedITHeadWindows Netzwerk10 Kommentare

Vorab hallo erstmal Community, ich bin neu hier im Forum. Ich habe unter den original Thread gepostet, allerdings ist ...

Batch & Shell
Leere Array-Werte aus einem Array entfernen
gelöst Frage von ToniHoBatch & Shell3 Kommentare

Hallo zusammen, ich bin dabei ein Powershell-Script zu schreiben, welches diverse Reports generieren kann. Für die Eingabe von SamAccountNames ...

Neue Wissensbeiträge
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 8 StundenMac OS X1 Kommentar

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 15 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 17 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 20 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1018 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...