J'essaie de créer une liste simple dans un VBscript, mais je ne trouve pas quelque chose de similaire.
Fondamentalement, je travaille sur Active Directory et j'ai besoin d'obtenir tous les groupes dont un utilisateur est membre pour tous les utilisateurs d'un domaine. Maintenant, chaque utilisateur peut être membre d'un nombre différent de groupes, je prévois donc d'utiliser un dictionnaire, la clé étant le SAMID de l'utilisateur et la valeur étant une liste de tous les groupes dont il est membre. .
Je peux le faire avec un tableau statique, mais je dois ensuite déclarer une grande taille aléatoire pour le tableau qui n'est pas agréable. Idéalement, ce que j'aimerais faire, c'est avoir une liste de type python, où je peux simplement faire quelque chose comme myList.Add et ne pas avoir à me soucier du dimensionnement.
J'ai essayé d'utiliser System.Collection.ArrayList, mais j'obtiens une erreur lorsque je l'exécute:
PS C:\tmp> cscript.exe .\foo.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
C:\tmp\foo.vbs(1, 1) (null): 0x80131700
comment puis-je accomplir cela?
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "Item1", ""
dic.Add "Item2", ""
dic.Add "Item3", ""
Débarrassez-vous du dictionnaire et libérez la puissance d'une ArrayList.
Option Explicit
dim list
Set list = CreateObject("System.Collections.ArrayList")
list.Add "Banana"
list.Add "Apple"
list.Add "Pear"
list.Sort
list.Reverse
wscript.echo list.Count ' --> 3
wscript.echo list.Item(0) ' --> Pear
wscript.echo list.IndexOf("Apple", 0) ' --> 2
wscript.echo join(list.ToArray(), ", ") ' --> Pear, Banana, Apple
EDIT: Je vois que vous avez déjà essayé ArrayList, mais vous avez obtenu une erreur. Il semble que votre installation du framework dotnet ne soit pas correcte (System.Collections.ArrayList en fait partie). Microsoft a un article sur la façon de résoudre ce problème: http://answers.Microsoft.com/en-us/windows/forum/windows_7-performance/error-code-0x80131700/3add8d80-00e0-4355-a994- 8630d01c18f5
Voici également une alternative ... Une véritable classe List que j'ai créée il y a quelque temps. Vous pouvez librement l'utiliser/le modifier selon vos besoins. La classe d'origine que j'ai construite dépend en fait d'une autre classe personnalisée appelée ArrayIterator.
Voici comment l'utiliser ...
Set myList = New List
myList.Add("a")
myList.Add("b")
myList.Add("c")
' Iterate through the List using ArrayIterator. You can of course use other methods...
Set myListItr = myList.GetIterator
While myListItr.HasNext
MsgBox myListItr.GetNext
Wend
' Iterate through the List by getting the underlying Array.
Dim element
For Each element In myList.GetArray
MsgBox element
Next
Code source de la classe List:
Class List
Private mArray
Private Sub Class_Initialize()
mArray = Empty
End Sub
' Appends the specified element to the end of this list.
Public Sub Add(element)
If IsEmpty(mArray) Then
ReDim mArray(0)
mArray(0) = element
Else
If mArray(UBound(mArray)) <> Empty Then
ReDim Preserve mArray(UBound(mArray)+1)
End If
mArray(UBound(mArray)) = element
End If
End Sub
' Removes the element at the specified position in this list.
Public Sub Remove(index)
ReDim newArray(0)
For Each atom In mArray
If atom <> mArray(index) Then
If newArray(UBound(newArray)) <> Empty Then
ReDim Preserve newArray(UBound(newArray)+1)
End If
newArray(UBound(newArray)) = atom
End If
Next
mArray = newArray
End Sub
' Returns the number of elements in this list.
Public Function Size
Size = UBound(mArray)+1
End Function
' Returns the element at the specified position in this list.
Public Function GetItem(index)
GetItem = mArray(index)
End Function
' Removes all of the elements from this list.
Public Sub Clear
mArray = Empty
End Sub
' Returns true if this list contains elements.
Public Function HasElements
HasElements = Not IsEmpty(mArray)
End Function
Public Function GetIterator
Set iterator = New ArrayIterator
iterator.SetArray = mArray
GetIterator = iterator
End Function
Public Function GetArray
GetArray = mArray
End Function
End Class
Code source pour ArrayIterator classe:
Class ArrayIterator
Private mArray
Private mCursor
Private Sub Class_Initialize()
mCursor = 0
End Sub
Public Property Let SetArray(array)
mArray = array
End Property
Public Function HasNext
HasNext = (mCursor < UBound(mArray)+1)
End Function
Public Function GetNext
GetNext = mArray(mCursor)
mCursor = mCursor + 1
End Function
End Class