badwolf
Goto Top

Array zugriff

VBS - Script mit Array

Hallo,

ich möchte in einem VBS Script auf ein Array zugreifen!
In dem Array werden die Gruppen einer AD aufgeführt.
BSP:
'--------------------------------------------------------  
Groups(0) = "\#A_prog1,OU=Applikation,OU=Standard,OU=hier,OU=Benutzer"   
Groups(1) = "\#A_prog2,OU=Applikation,OU=Standard,OU=hier,OU=Benutzer"        
Groups(2) = "\#A_prog3,OU=Applikation,OU=Standard,OU=hier,OU=Benutzer"     
Groups(3) = "\#A_prog3,OU=Applikation,OU=Standard,OU=hier,OU=Benutzer"  
'--------------------------------------------------------   
Nun möchte ich aber den aktiven Array auslesen und in einer If funktion einer software zuweisen.
'--------------------------------------------------------  
OS = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\ProductName")   
If (InStr(OS, "XP")) & Groups(0|1|2|3))      'Wenn Windows XP laufend und eine entsprechende Gruppe,  
Then    
ShellObject.Run ("c:\scripttest\script1.vbs")   
end If 
'--------------------------------------------------------  

aber wie kann ich das bei dem Array bewerkstelligen???
Das ODER in der Klammer habe ich jetzt erst hinzugefügt...


Wäre super wenn mir wer helfen könnte ;)

Content-ID: 185383

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

mak-xxl
mak-xxl 23.05.2012 um 15:57:23 Uhr
Goto Top
Moin BADwolf,

etwa so:

OS = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\ProductName")    
If (InStr(OS, "XP")) > 0 Then  
    For i = 0 To UBound(Groups)
        If Groups(i) = "1. Vergleichstext" Then          
            ShellObject.Run ("c:\scripttest\script1.vbs")  
        ElseIf Groups(i) = "2. Vergleichstext" Then          
            ShellObject.Run ("c:\scripttest\script2.vbs")  
        ElseIf Groups(i) = "3. Vergleichstext" Then          
            ShellObject.Run ("c:\scripttest\script3.vbs")  
        ElseIf Groups(i) = "3. Vergleichstext" Then          
            ShellObject.Run ("c:\scripttest\script4.vbs")  
        End If
    Next
End If  

oder so:

OS = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\ProductName")    
If (InStr(OS, "XP")) > 0 Then  
    For i = 0 To UBound(Groups)
        If InStr(Groups(i), "1. Vergleichstext") > 0 Then          
            ShellObject.Run ("c:\scripttest\script1.vbs")  
        ElseIf InStr(Groups(i), "2. Vergleichstext") > 0 Then          
            ShellObject.Run ("c:\scripttest\script2.vbs")  
        ElseIf InStr(Groups(i), "3. Vergleichstext") > 0 Then          
            ShellObject.Run ("c:\scripttest\script3.vbs")  
        ElseIf InStr(Groups(i), "4. Vergleichstext") > 0 Then          
            ShellObject.Run ("c:\scripttest\script4.vbs")  
        End If
    Next
End If  

Freundliche Grüße von der Insel - Mario
bastla
bastla 23.05.2012 aktualisiert um 15:58:34 Uhr
Goto Top
Hallo BADwolf!

Was genau möchtest Du eigentlich womit vergleichen?

Wenn es nur darum ginge, einen in der Variablen "MyGroup" enthaltenen Gruppennamen auf Vorhandensein in irgendeiner der angeführten Gruppen zu prüfen (und es keine Verwechslungsmöglichkeit mit einer OU geben kann), würde ich einfach alle Array-Elemente zu einem String zusammenfassen und "InStr()" verwenden - also ungetestet etwa:
If InStr(OS, "XP") And InStr(Join(Groups), MyGroup) Then
Grüße
bastla
BADwolf
BADwolf 23.05.2012 um 16:17:55 Uhr
Goto Top
Möchte eigentlich nicht vergleichen. Mir geht es darum... Wenn der benutzer xp benutzt, soll sich eine .bat ausführen. Wenn er aber Win 7 benutzt Soll sich eine Gruppenabhängige bat datei ausführen.

Hatte im letzten threat schon eine ähnliche frage. Aber in diesem Script, was ich erweitern soll gibt es eben schon dieses Gruppenzuordnungsarray... Und würde es .. Weil es ja schon vorhanden ist, eben bei ser wenn funktion benutzen. .. Vielkeicht ist auch schon der anfang verkehrt ... Oder ich machs mir eindaxh schwer face-smileface-smileface-smile
bastla
bastla 23.05.2012 aktualisiert um 16:30:32 Uhr
Goto Top
Hallo BADwolf!

Mario hat offensichtlich gleich verstanden, was Du gemeint hast - für mich sah Deine Darstellung nach etwas anderem aus ...
@mario
Alternativ zur Schleife könntest Du auch meinen Vorschlag mit "Join()" verwenden - dann wäre für jedes Script nur jeweils ein Vergleich erforderlich ...

Grüße
bastla
BADwolf
BADwolf 23.05.2012 um 16:44:20 Uhr
Goto Top
Danke mario danke bastla, werde es wenn ich wieder vernünftige hardware vor mir habe ausprobieren soweit wäre ich selbst ich nicht gekommen face-smile
mak-xxl
mak-xxl 23.05.2012 aktualisiert um 16:51:53 Uhr
Goto Top
Moin BADwolf,

dann etwa so:

OS = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\ProductName")    
If (InStr(OS, "XP")) > 0 Then  
    ShellObject.Run ("c:\scripttest\scriptXP.vbs")  
ElseIf (InStr(OS, "Win7")) > 0 Then  
    For i = 0 To UBound(Groups)
        If Groups(i) = "1. Vergleichstext" Then          
            ShellObject.Run ("c:\scripttest\script1.vbs")  
        ElseIf Groups(i) = "2. Vergleichstext" Then          
            ShellObject.Run ("c:\scripttest\script2.vbs")  
        ElseIf Groups(i) = "3. Vergleichstext" Then          
            ShellObject.Run ("c:\scripttest\script3.vbs")  
        ElseIf Groups(i) = "3. Vergleichstext" Then          
            ShellObject.Run ("c:\scripttest\script4.vbs")  
        End If
    Next
End If  

oder so:

OS = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\ProductName")    
If (InStr(OS, "XP")) > 0 Then  
    ShellObject.Run ("c:\scripttest\scriptXP.vbs")  
ElseIf (InStr(OS, "Win7")) > 0 Then  
    For i = 0 To UBound(Groups)
        If InStr(Groups(i), "1. Vergleichstext") > 0 Then          
            ShellObject.Run ("c:\scripttest\script1.vbs")  
        ElseIf InStr(Groups(i), "2. Vergleichstext") > 0 Then          
            ShellObject.Run ("c:\scripttest\script2.vbs")  
        ElseIf InStr(Groups(i), "3. Vergleichstext") > 0 Then          
            ShellObject.Run ("c:\scripttest\script3.vbs")  
        ElseIf InStr(Groups(i), "4. Vergleichstext") > 0 Then          
            ShellObject.Run ("c:\scripttest\script4.vbs")  
        End If
    Next
End If  

Das war der Teil wie oben - mit einer zusätzlichen Weiche für XP/Win7. Wenn Du eine gruppenabhängige Script-Verzweigung haben willst, musst Du auf jeden Fall vergleichen (i.e. welcher Gruppe gehört der User an?) - das kannst Du fest eingeben (als 'Vergleichsstring') oder von ifmember anliefern lassen. Wenn Du nur nach einem Gruppennamen (siehe bastlas Post) abgleichst und andere 'Fehltritte' ausschließen kannst, dann nimm bastlas Kurzversion, etwa so:

OS = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\ProductName")  
Const strGroupName = "Gruppenname"    
If (InStr(OS, "XP")) > 0 Then  
    ShellObject.Run ("c:\scripttest\scriptXP.vbs")  
ElseIf (InStr(OS, "Win7")) > 0 Then  
    If InStr(Join(Groups), strGroupName) > 0 Then
        ShellObject.Run ("c:\scripttest\script1.vbs")  
    EndIf
End If  

@bastla
Ich hatte eher das Prinzip der Arrayabfrage als Fragestellung verstanden, weil im Beispiel schien mir das Array fehl am Platze, solange es nicht beispielsweise pro Gruppe gleich den zugehörigen Scriptnamen enthält ...

Schönen Feierabend Euch Beiden und freundliche Grüße von der Insel - Mario
bastla
bastla 23.05.2012 um 16:57:32 Uhr
Goto Top
Hallo Mario!
Ich hatte eher das Prinzip der Arrayabfrage als Fragestellung verstanden, weil im Beispiel schien mir das Array fehl am Platze, solange es nicht beispielsweise pro Gruppe gleich den zugehörigen Scriptnamen enthält ...
Meine Interpretation war, dass das Script nur ausgeführt werden sollte, wenn der User einer der im Array angegebenen Gruppen angehört - hätte ich aber aufgrund des vorigen Threads von BADwolf eigentlich schon besser wissen sollen ... face-sad
Was die "Join()"-Variante betrifft hatte ich es etwa so gemeint:
OS = ShellObject.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\ProductName")  
AllGroups = Join(Groups)
If (InStr(OS, "XP")) > 0 Then  
    ShellObject.Run ("c:\scripttest\scriptXP.vbs")  
ElseIf (InStr(OS, "Win7")) > 0 Then  
    If InStr(AllGroups, "1. Vergleichstext") > 0 Then  
        ShellObject.Run ("c:\scripttest\script1.vbs")  
    ElseIf InStr(AllGroups, "2. Vergleichstext") > 0 Then  
        ShellObject.Run ("c:\scripttest\script2.vbs")  
    ElseIf InStr(AllGroups, "3. Vergleichstext") > 0 Then  
        ShellObject.Run ("c:\scripttest\script3.vbs")  
    ElseIf InStr(AllGroups, "4. Vergleichstext") > 0 Then  
        ShellObject.Run ("c:\scripttest\script4.vbs")  
    End If
End If
Grüße
bastla
BADwolf
BADwolf 23.05.2012 um 21:48:16 Uhr
Goto Top
Es tut mir leid dass das Thread noch misteriöser ist, als der des letzten mal. Aber das Script aus dem diese Schnippsel stammt ist ca. 1000 Zeilen lang und sehr sehr unübersichtlich ... ich hoffe dass das bald ein Ende hat und ich mich wieder anderen, lustigeren Sachen zuwenden kann.

Werde eure Einträge morgen prüfen...
BADwolf
BADwolf 24.05.2012 um 14:48:33 Uhr
Goto Top
Hat super funktioniert, vielen Lieben dank euch beiden. ...

Grüße
BadWolf