visual vbs tutorial significado script español comandos church vbscript

significado - vbscript tutorial español



Listas en VBScript (3)

Aquí hay una alternativa también ... Una clase de lista real que creé hace un tiempo. Puede usarlo / modificarlo libremente para adaptarlo a sus necesidades. La clase original que construí realmente depende de otra clase personalizada llamada ArrayIterator .

Aquí es cómo usarlo ...

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

Código fuente para la clase 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

Código fuente para la clase ArrayIterator :

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

Intento crear una lista simple en un VBscript, pero no puedo encontrar algo similar.

Básicamente, estoy trabajando en Active Directory, y necesito obtener todos los grupos de los que es miembro un usuario para todos los usuarios dentro de un dominio. Ahora, cada usuario puede ser miembro de un número diferente de grupos, así que planeo usar un diccionario, con la clave que es el SAMID para el usuario, y el valor es una lista de todos los grupos de los que es miembro .

Puedo hacer esto con una matriz estática, pero luego tengo que declarar un gran tamaño aleatorio para la matriz que no es bueno. Lo que idealmente me gustaría hacer es tener una lista tipo python, donde pueda hacer algo simple como myList.Add y no tener que preocuparme por el tamaño.

Intenté usar System.Collection.ArrayList, pero recibo un error cuando lo ejecuto:

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

¿Cómo puedo lograr esto?


Deshágase del diccionario y libere el poder de una 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: veo que ya probaste ArrayList, pero obtuve un error. Parece que su instalación del marco de dotnet no es correcta (System.Collections.ArrayList es parte de eso). Microsoft tiene un artículo sobre cómo resolver eso: http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/error-code-0x80131700/3add8d80-00e0-4355-a994-8630d01c18f5


Set dic = CreateObject("Scripting.Dictionary") dic.Add "Item1", "" dic.Add "Item2", "" dic.Add "Item3", ""