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-Key: 61271

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

Printed on: April 19, 2024 at 07:04 o'clock

Member: AndreasHoster
AndreasHoster Jun 13, 2007 at 13:15:28 (UTC)
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.
Member: Flieg
Flieg Jun 13, 2007 at 13:31:13 (UTC)
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.
Member: AndreasHoster
AndreasHoster Jun 13, 2007 at 14:39:28 (UTC)
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
Member: bastla
bastla Jun 13, 2007 at 16:36:24 (UTC)
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
Member: Flieg
Flieg Jun 13, 2007 at 16:55:48 (UTC)
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
Member: bastla
bastla Jun 13, 2007 at 17:23:24 (UTC)
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
Member: Flieg
Flieg Jun 14, 2007 at 06:41:27 (UTC)
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?
Member: Flieg
Flieg Jun 14, 2007 at 07:25:01 (UTC)
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
Member: Biber
Biber Jun 14, 2007 at 08:10:13 (UTC)
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
Member: bastla
bastla Jun 14, 2007 at 10:17:20 (UTC)
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