VBS - Reg-Werte in Array einlesen und später wieder auslesen?
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!
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97819
Url: https://administrator.de/contentid/97819
Ausgedruckt am: 19.11.2024 um 09:11 Uhr
7 Kommentare
Neuester Kommentar
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):
Grüße
bastla
P.S.: Da Du den entsprechenden Key nicht genannt hast, musste ich mir selbst ein Beispiel suchen ...
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):
Const HKLM = &H80000002
Const DWORD = 4
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
sKey = "Software\Microsoft\Windows NT\CurrentVersion\FontMapper"
objReg.EnumValues HKLM, sKey, aNames, aTypes
'nur ein Gesamtarray
Dim aEntries
ReDim aEntries(UBound(aNames), 1)
'eigenes Array für Werte
Dim aValues
ReDim aValues(UBound(aNames))
'Dictionary
Set d = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(aNames)
If aTypes(i) = DWORD Then
objReg.GetDWORDValue HKLM, sKey, aNames(i), Value
'nur ein Gesamtarray
aEntries(i, 0) = aNames(i)
aEntries(i, 1) = Value
'eigenes Array für Werte
aValues(i) = Value
'Dictionary
d.Add aNames(i), Value
End If
Next
'nur ein Gesamtarray
For i = 0 To UBound(aEntries)
WScript.Echo aEntries(i, 0) & ": " & aEntries(i, 1)
Next
WScript.Echo "-----------------------"
'eigenes Array für Werte
For i = 0 To UBound(aNames)
WScript.Echo aNames(i) & ": " & aValues(i)
Next
WScript.Echo "-----------------------"
'Dictionary
For Each Key In d.Keys
WScript.Echo Key & ": " & d.Item(Key)
Next
bastla
P.S.: Da Du den entsprechenden Key nicht genannt hast, musste ich mir selbst ein Beispiel suchen ...
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
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
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:
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:
Damit blieben die einzelnen Scripts dann tatsächlich "eigenständig" ...
Grüße
bastla
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:
Const HKLM = &H80000002
Const DWORD = 4
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
sKey = "Software\Microsoft\Windows NT\CurrentVersion\FontMapper"
objReg.EnumValues HKLM, sKey, aNames, aTypes
'nur ein Gesamtarray
Dim aEntries
ReDim aEntries(UBound(aNames), 1)
'eigenes Array für Werte
Dim aValues
ReDim aValues(UBound(aNames))
'Dictionary
Set d = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(aNames)
If aTypes(i) = DWORD Then
objReg.GetDWORDValue HKLM, sKey, aNames(i), Value
'nur ein Gesamtarray
aEntries(i, 0) = aNames(i)
aEntries(i, 1) = Value
'eigenes Array für Werte
aValues(i) = Value
'Dictionary
d.Add aNames(i), Value
End If
Next
'Aufruf der Unterprogramme
NurEinArray
WScript.Echo "-----------------------"
Eigenes
WScript.Echo "-----------------------"
Dict
'##################
'Ende Hauptprogramm
'##################
'Unterprogramme
Sub NurEinArray
'nur ein Gesamtarray
For i = 0 To UBound(aEntries)
WScript.Echo aEntries(i, 0) & ": " & aEntries(i, 1)
Next
End Sub
Sub Eigenes
'eigenes Array für Werte
For i = 0 To UBound(aNames)
WScript.Echo aNames(i) & ": " & aValues(i)
Next
End Sub
Sub Dict
'Dictionary
For Each Key In d.Keys
WScript.Echo Key & ": " & d.Item(Key)
Next
End Sub
'Aufruf der Unterprogramme
NurEinArray aEntries
WScript.Echo "-----------------------"
Eigenes aNames, aValues
WScript.Echo "-----------------------"
Dict d
'##################
'Ende Hauptprogramm
'##################
'Unterprogramme
Sub NurEinArray(aE)
'nur ein Gesamtarray
For i = 0 To UBound(aE)
WScript.Echo aE(i, 0) & ": " & aE(i, 1)
Next
End Sub
Sub Eigenes(aN, aV)
'eigenes Array für Werte
For i = 0 To UBound(aN)
WScript.Echo aN(i) & ": " & aV(i)
Next
End Sub
Sub Dict(dic)
'Dictionary
For Each Key In dic.Keys
WScript.Echo Key & ": " & dic.Item(Key)
Next
End Sub
Grüße
bastla