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

VBS - Reg-Werte in Array einlesen und später wieder auslesen?

Frage Entwicklung VB for Applications

Mitglied: gdnmarc

gdnmarc (Level 1) - Jetzt verbinden

25.09.2008, aktualisiert 18.10.2012, 6668 Aufrufe, 7 Kommentare

Hallo zusammen,

ich möchte eine unbekannte Anzahl von DWORD Reg-Einträgen in einem vorgebenen Schlüssel in ein Array einlesen.

Später möchte ich dann über ein anderes Script welches ich in dem o.a Script aufrufe entspreche benötigte Werte auslesen, bzw. weiterverwenden.

1.) wie kann ich ein solches Array erstellen, um wertnamen und wertinhalt in ein array einzulesen
2.) wie kann ich wertinhalte bestimmter wertnamen über ein anderes script wieder auslesen, bzw. weiterverweden (wscript.echo)

Also...Wert x mit Inhalt 1 und Wert y mit Inhalt 2 aus Schlüssel abc in ein Array einlesen und in einem eingebundenen Script dann Inhalte der Werte x und y auslesen.

Ich hoffe mich versteht jemand und kann mir ein wenig weiterhelfen!!!!!!

1000Dank!

Viele Grüße!Q!
Mitglied: bastla
25.09.2008 um 18:42 Uhr
Hallo gdnmarc!

So ganz verstehe ich Dein Vorhaben nicht; vor allem: wann soll das zweite Script gestartet werden, und warum liest dieses nicht einfach selbst die Werte ein?

Anyhow - das Einlesen könnte so aussehen (wobei hier verschiedene Möglichkeiten - mehrdimensionales Array, zwei eindimensionale Arrays, Dictionary - für das Ergebnis in Frage kämen):
01.
Const HKLM = &H80000002 
02.
Const DWORD = 4 
03.
strComputer = "." 
04.
 
05.
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
06.
    strComputer & "\root\default:StdRegProv") 
07.
  
08.
sKey = "Software\Microsoft\Windows NT\CurrentVersion\FontMapper" 
09.
objReg.EnumValues HKLM, sKey, aNames, aTypes 
10.
 
11.
'nur ein Gesamtarray 
12.
Dim aEntries 
13.
ReDim aEntries(UBound(aNames), 1) 
14.
'eigenes Array für Werte 
15.
Dim aValues 
16.
ReDim aValues(UBound(aNames)) 
17.
'Dictionary 
18.
Set d = CreateObject("Scripting.Dictionary") 
19.
 
20.
For i = 0 To UBound(aNames) 
21.
    If aTypes(i) = DWORD Then 
22.
        objReg.GetDWORDValue HKLM, sKey, aNames(i), Value 
23.
        'nur ein Gesamtarray 
24.
        aEntries(i, 0) = aNames(i) 
25.
        aEntries(i, 1) = Value 
26.
        'eigenes Array für Werte 
27.
        aValues(i) = Value 
28.
        'Dictionary 
29.
        d.Add aNames(i), Value 
30.
    End If 
31.
Next 
32.
 
33.
'nur ein Gesamtarray 
34.
For i = 0 To UBound(aEntries) 
35.
    WScript.Echo aEntries(i, 0) & ": " & aEntries(i, 1) 
36.
Next 
37.
WScript.Echo "-----------------------" 
38.
'eigenes Array für Werte 
39.
For i = 0 To UBound(aNames) 
40.
    WScript.Echo aNames(i) & ": " & aValues(i) 
41.
Next 
42.
WScript.Echo "-----------------------" 
43.
'Dictionary 
44.
For Each Key In d.Keys 
45.
    WScript.Echo Key & ": " & d.Item(Key) 
46.
Next
Grüße
bastla

P.S.: Da Du den entsprechenden Key nicht genannt hast, musste ich mir selbst ein Beispiel suchen ...
Bitte warten ..
Mitglied: gdnmarc
25.09.2008, aktualisiert 18.10.2012
Hallo bastla!!!

Ein riesen Danke an Dich....sagmal...ich habe drei Anfragen gestellt und jedes Mal von Dir ein fertiges Script welches auf Anhieb funktioniert zurückbekommen!! Ich bin Dir sehr dankbar!!!!!!!!!!!!!!!!!! Du hattest mir auch mal ein Script erstellt, welches in Registry mir den höchsten Schlüssel aus der Registry ausliest: http://www.administrator.de/forum/vbscript-zum-auslesen-eines-bestimmte ... In diesem Schlüssel finde ich Werte die ich zur Zeit fest auslese....also gebe mir Inhalt von Key 1 usw. aus und mappe zum Beispiel dann ein Laufwerk oder ähnliches mit den Werten. Das 1. Script soll als Basis dienen und mit diesem Script alle Werte in ein Array lesen. Danach soll in diesem Script einfach ein weiteres Script aufgerufen werden, um diese Daten zu verarbeiten (copy, reg, suchen und ersetzen, was gerade anliegt) Diese Scripte soll jeder selber erstelle und einfach in das Hauptscript einbinden. In den individuellen Scripten muss der Inhalt des Arrays aber vorhanden sein, damit die Werte auch weiterverarbeitet werden können. Geht das?

Danke, danke, danke!!

LG, Marc
Bitte warten ..
Mitglied: bastla
25.09.2008 um 19:14 Uhr
Hallo gdnmarc!

Ohne mich jetzt wirklich hineingedacht zu haben: Am einfachsten wäre es aus meiner Sicht, alles in ein Script zu packen, wobei das Auslesescript zum Erstellen des Arrays/Dictionary als Hauptprogramm zuerst ausgeführt werden müsste, und alle weiteren Scripts danach einfach als "Sub" aufgerufen werden könnten, wobei (da Variablen in VBScript ohnehin immer global sind) diese Scripts dann automatisch Zugriff auf das Array oder Dictionary hätten.

Grüße
bastla
Bitte warten ..
Mitglied: gdnmarc
25.09.2008 um 19:17 Uhr
Hi Bastla,

wie kann ich mir das den vorstellen, das diese als Sub aufgerufen werden können?

Thx!!!

Gruß, Marc
Bitte warten ..
Mitglied: bastla
25.09.2008 um 19:41 Uhr
Hallo gdnmarc!

Im Prinzip so, wie ich das oben schon integriert hatte, wobei ich gleich ohne Verwendung von "Subs" die Ausgabevarianten habe laufen lassen - mit Aufteilung in einzelne "Subs" könnte das so aussehen:
01.
Const HKLM = &H80000002 
02.
Const DWORD = 4 
03.
strComputer = "." 
04.
 
05.
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
06.
    strComputer & "\root\default:StdRegProv") 
07.
  
08.
sKey = "Software\Microsoft\Windows NT\CurrentVersion\FontMapper" 
09.
objReg.EnumValues HKLM, sKey, aNames, aTypes 
10.
 
11.
'nur ein Gesamtarray 
12.
Dim aEntries 
13.
ReDim aEntries(UBound(aNames), 1) 
14.
'eigenes Array für Werte 
15.
Dim aValues 
16.
ReDim aValues(UBound(aNames)) 
17.
'Dictionary 
18.
Set d = CreateObject("Scripting.Dictionary") 
19.
 
20.
For i = 0 To UBound(aNames) 
21.
    If aTypes(i) = DWORD Then 
22.
        objReg.GetDWORDValue HKLM, sKey, aNames(i), Value 
23.
        'nur ein Gesamtarray 
24.
        aEntries(i, 0) = aNames(i) 
25.
        aEntries(i, 1) = Value 
26.
        'eigenes Array für Werte 
27.
        aValues(i) = Value 
28.
        'Dictionary 
29.
        d.Add aNames(i), Value 
30.
    End If 
31.
Next 
32.
 
33.
'Aufruf der Unterprogramme 
34.
NurEinArray 
35.
WScript.Echo "-----------------------" 
36.
Eigenes 
37.
WScript.Echo "-----------------------" 
38.
Dict 
39.
'################## 
40.
'Ende Hauptprogramm 
41.
'################## 
42.
 
43.
'Unterprogramme 
44.
Sub NurEinArray 
45.
'nur ein Gesamtarray 
46.
For i = 0 To UBound(aEntries) 
47.
    WScript.Echo aEntries(i, 0) & ": " & aEntries(i, 1) 
48.
Next 
49.
End Sub 
50.
 
51.
Sub Eigenes 
52.
'eigenes Array für Werte 
53.
For i = 0 To UBound(aNames) 
54.
    WScript.Echo aNames(i) & ": " & aValues(i) 
55.
Next 
56.
End Sub 
57.
 
58.
Sub Dict 
59.
'Dictionary 
60.
For Each Key In d.Keys 
61.
    WScript.Echo Key & ": " & d.Item(Key) 
62.
Next 
63.
End Sub
Noch genauer wäre es, dem jeweiligen "Sub" beim Aufruf das Array als Parameter zu übergeben - das sähe (bis Zeile 31 würde sich dadurch nichts ändern) dann so aus:
01.
'Aufruf der Unterprogramme 
02.
NurEinArray aEntries 
03.
WScript.Echo "-----------------------" 
04.
Eigenes aNames, aValues 
05.
WScript.Echo "-----------------------" 
06.
Dict d 
07.
'################## 
08.
'Ende Hauptprogramm 
09.
'################## 
10.
 
11.
'Unterprogramme 
12.
Sub NurEinArray(aE) 
13.
'nur ein Gesamtarray 
14.
For i = 0 To UBound(aE) 
15.
    WScript.Echo aE(i, 0) & ": " & aE(i, 1) 
16.
Next 
17.
End Sub 
18.
 
19.
Sub Eigenes(aN, aV) 
20.
'eigenes Array für Werte 
21.
For i = 0 To UBound(aN) 
22.
    WScript.Echo aN(i) & ": " & aV(i) 
23.
Next 
24.
End Sub 
25.
 
26.
Sub Dict(dic) 
27.
'Dictionary 
28.
For Each Key In dic.Keys 
29.
    WScript.Echo Key & ": " & dic.Item(Key) 
30.
Next 
31.
End Sub
Damit blieben die einzelnen Scripts dann tatsächlich "eigenständig" ...

Grüße
bastla
Bitte warten ..
Mitglied: gdnmarc
26.09.2008 um 11:43 Uhr
Hi Bastla,

thx vielen Dank!! Ist so ein Sub das gleiche wie eine Funktion die über ein Script aufgerufen werden kann? Oder wäre eine Funktion nochmals etwas anderes.

Sorry für die blöden Fragen

Vielen Dank und Gruß,

Marc
Bitte warten ..
Mitglied: bastla
26.09.2008 um 12:45 Uhr
Hallo gdnmarc!

"Sub" und "Function" sind ähnliche Konstrukte, wobei der größte Unterschied eigentlich darin liegt, dass eine "Function" einen Rückgabewert erzeugt (oder zumindest erzeugen sollte) ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

C und C++
String einlesen in Array und wieder ausgeben von hinten (4)

Frage von Protected zum Thema C und C ...

Batch & Shell
gelöst Leere Array-Werte aus einem Array entfernen (3)

Frage von ToniHo zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (24)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...