flieg
Goto Top

Wie kann ich in ein WMI Script hex Zahlenarray definieren?

Hallo


Ich habe folgendes Problem. Ich bin gerade dabei ein WMI Script zu schreiben was verschieden Schlüssel und Werte in die Registry schreibt. Das große Problem was ich dabei habe, ist das mehrere hex Werte eingetragen werden müssen. Ich habe die suche und google schon bemüht finde aber nichts passendes. Kann mir jemand helfen und sagen wie ich das am besten realisiere. Ist wichtig muss bei uns im AD verteilt werden der Chef hängt mir schon im Nacken.

Ein Auszug aus dem Script damit man es sich vielleicht besser vorstellen kann.
....
Set wmireg = GetObject("winmgmts:root\default:StdRegProv")  

Const HKLM = &H80000002

key = "SOFTWARE\ORL\WinVNC3"  
result = wmireg.CreateKey(HKLM, key)

result = wmireg.SetDWORDValue(HKLM, key, "MSLogonRequired", 00000001)   
result = wmireg.SetDWORDValue(HKLM, key, "NewMSLogon", 00000001)  

binear = Array(02,00,2c,00,01,00,00,00,00,00,24,00,03,00,00,00,01,05,00,00,00,00,00,05,15,00,00,00,79,e3,fc,53,16,c0,07,e5,3b,2b,25,5e,03,00)

result = wmireg.SetBinaryValue(HKLM, key,"ACL", binear)  
In dem Array sieht man das es jede Menge Hex Zahlen sin die so WMI nicht akzeptiert


MfG
Andy

Content-ID: 61271

Url: https://administrator.de/contentid/61271

Ausgedruckt am: 26.11.2024 um 14:11 Uhr

AndreasHoster
AndreasHoster 13.06.2007 um 15:15:28 Uhr
Goto Top
Natürlich nicht, es sind ja auch keine Hex Zahlen.
Wenn Du Dein Skript genau anschaust, siehst Du wie eine Hex Zahl in VBS auszusehen hat:
Const HKLM = &H80000002
Wenn Du jetzt den Array entsprechend änderst:
binear = Array(&H02,&H00,&H2c,&H00,... (Also bei den 00 und 02 kann man &H weglassen)
dann gehts auch.
Flieg
Flieg 13.06.2007 um 15:31:13 Uhr
Goto Top
Ich weis worauf du hinaus willst. Aber gibt es nicht eine möglichkeit das gesamte Array als Hex Zahlen zu definieren. Denn das ist nicht der einzige Schlüssel und so schreibe ich mich dumm wenn ich vor jede Zahl &H schreibe.
AndreasHoster
AndreasHoster 13.06.2007 um 16:39:28 Uhr
Goto Top
Man könnte auch sowas machen, nur sind 2 " genausoviel zu tippen wie &H
ar1 = Array("00","10","ff")
redim binaer(UBound(ar1))
For i = LBound(ar1) to UBound(ar1)
binaer2(i)=CInt("&H" & ar1(i))
Next

Ansonsten:
Tippen lernen, dann dauerts nicht solange face-wink
bastla
bastla 13.06.2007 um 18:36:24 Uhr
Goto Top
... ein wenig an den Anführungszeichen könnte man schon noch sparen:
ar1 = "00,10,ff"  
binaer = Split(ar1,",")  
ReDim binaer2(UBound(binaer))
For i = LBound(binaer) To UBound(binaer)
    binaer2(i) = CInt("&H" & binaer(i))  
Next

Grüße
bastla
Flieg
Flieg 13.06.2007 um 18:55:48 Uhr
Goto Top
@bastla

sieht gut aus was du da geschrieben hast.Es wäre super wenn du mir genau erklären könntest was in den einzelnen Schritten bei dein Script passiert. Da ich noch voll in den Kinderschuhen bei Scripten stecke und das im einzelnen Nachvollziehen möchte. Ich verstehe es leider nur teilweise.


MfG

Andy
bastla
bastla 13.06.2007 um 19:23:24 Uhr
Goto Top
Hallo Flieg!

Ist nur eine Abwandlung von AndreasHoster's Vorschlag:
Zunächst die ganzen Hex-Zahlen mit einem beliebigen Trennzeichen (hier eben ",") in einen normalen String packen, diesen mittels "Split"-Funktion in ein Array aufsplitten lassen und aus dem (Text-)Array "binaer" über das Voranstellen von "&H" und die nachfolgende Konvertierung mit "CInt()" die jeweiligen Zahlenwerte in ein weiteres Array "binaer2" (dessen Größe über das "ReDim"-Statement entsprechend der Größe des "binaer"-Arrays festgelegt wurde) schreiben.

Grüße
bastla
Flieg
Flieg 14.06.2007 um 08:41:27 Uhr
Goto Top
Guten morgen

du gute Nachricht ist das Script meckert nicht mehr rum, die schlechte ist das er den Schlüssel nicht einträgt. Kann mir jemand weiterhelfen bevor ich verzweifle?
Flieg
Flieg 14.06.2007 um 09:25:01 Uhr
Goto Top
So nach suchen mit Hilfe habe ich den Fehler gefunden. Es war ein Tippfehler ich hatte binear geschrieben und ihr habt es in euren Script richtig mit ae geschrieben. Natürlich hatte er dann die Variabel nicht gefunden. Kleiner fehler große Ursache. Hier das ganze Script wie es jetzt funktioniert.

Set wmireg = GetObject("winmgmts:root\default:StdRegProv")

Const HKLM = &H80000002

key = "SOFTWARE\ORL\WinVNC3"
result = wmireg.CreateKey(HKLM, key)

result = wmireg.SetDWORDValue(HKLM, key, "MSLogonRequired", 00000001)
result = wmireg.SetDWORDValue(HKLM, key, "NewMSLogon", 00000001)


ar1 = "02,00,2c,00,01,00,00,00,00,00,00,00,00,00,00,05,15,00,00,00,79,e3,fc,53,16,c0,ea,32,07,e5,3b,2b,25,5e,03,00"
binaer = Split(ar1,",")
ReDim binaer2(UBound(binaer))
For i = LBound(binaer) To UBound(binaer)
binaer2(i) = CInt("&h" & binaer(i))


next
result = wmireg.SetBinaryValue(HKLM, key,"ACL", binaer2)


Ich danke euch für euere Hilfe
Biber
Biber 14.06.2007 um 10:10:13 Uhr
Goto Top
Moin Flieg,

ich habe mir folgenden Kommentar gestern schon verkniffen, hole es aber heute nach...

Meine Empfehlung zumindest ist (zumindest bei Skritsprachen, die unterschiedliche Datentypen kennen, bei Batch ist es nicht nötig):

  • benenne Variablennamen entweder deutsch oder denglish
  • orientiere Dich am Besten an Konventionen wie der Ungarischen Notation
  • und bei VB-Varianten erzwingt ein "Option Explicit" eine gewisse Disziplin

Dein Schnipsel unter Berücksichtigung dieser drei Pünktchen würde in etwa so aussehen können:

' optional: Option Explicit  
' Konverntionen z.B. Präfix "o" für Objekte, "str" für Strings,   
' "b" für boolesche Variablen...  
Set owmireg = GetObject("winmgmts:root\default:StdRegProv")  

Const HKLM = &H80000002

strKey = "SOFTWARE\ORL\WinVNC3"  
bResult = owmireg.CreateKey(HKLM, key)

bresult = owmireg.SetDWORDValue(HKLM, strKey, "MSLogonRequired", 00000001)   
bresult = owmireg.SetDWORDValue(HKLM, strKey, "NewMSLogon", 00000001)  

aOfStr = "02,00,2c,00,01,00,00,00,00,00,00,00,00,00,00,05,15,00,00,00,79,e3,fc,53,16,c0,ea,32,07,e5,3b,2b,25,5e,03,00"  
aOfBinary = Split(ar1,",")  
ReDim aOfBinary2(UBound(aOfBinary))
For i = LBound(binaer) To UBound(aOfBinary)
aOfBinary2(i) = CInt("&h" & aOfBinary(i))  

next
bResult = owmireg.SetBinaryValue(HKLM, strKey,"ACL", aOfBinary2)  

[ungetestete Skizze]

Grüße
Biber
bastla
bastla 14.06.2007 um 12:17:20 Uhr
Goto Top
... ebenso ungetestet, aber etwas an die Variableninhalte angepasst:
' optional: Option Explicit  
' Konverntionen z.B. Präfix "o" für Objekte, "str" für Strings,   
' "int" für Integer, "a" für Arrays ...  

Set oWmiReg = GetObject("winmgmts:root\default:StdRegProv")  

Const HKLM = &H80000002

strKey = "SOFTWARE\ORL\WinVNC3"  
intResult = oWmiReg.CreateKey(HKLM, strKey)

intResult = oWmiReg.SetDWORDValue(HKLM, strKey, "MSLogonRequired", 00000001)   
intResult = oWmiReg.SetDWORDValue(HKLM, strKey, "NewMSLogon", 00000001)  

strHexInput = "02,00,2c,00,01,00,00,00,00,00,00,00,00,00,00,05,15,00,00,00,79,e3,fc,53,16,c0,ea,32,07,e5,3b,2b,25,5e,03,00"  
aOfStr = Split(strHexInput,",")  
ReDim aOfBinary(UBound(aOfStr))
For i = LBound(aOfStr) To UBound(aOfStr)
    aOfBinary(i) = CInt("&H" & aOfStr(i))  
Next

intResult = oWmiReg.SetBinaryValue(HKLM, strKey, "ACL", aOfBinary)  

Grüße
bastla