VBS - создать объект и передать его через функции и подпрограммы? - PullRequest
0 голосов
/ 24 марта 2011

Я что-то пробую.У меня есть эта система, где куча скриптов запускается при определенных обработчиках событий.Это используется при создании пользователей в Active Directory.

Итак, я думаю, что мне нужна функция, которая в основном собирает свойства пользователя, обрабатываемого в - надеюсь, объект.А затем вернуть этот объект и использовать его в других функциях и подпрограммах.Так что, возможно, я смогу получить нужные свойства, используя только «myObject.firstname», и все.

Как я могу создать объект, создать и установить в нем значения и вернуть весь объект?Возможно ли это в VBS?

Редактировать: Что было бы лучше, если бы я мог создать объект, который содержит эти свойства и просто иметь возможность доступа к ним всякий раз, когда мне нужно.

Я в основномпосле чего-то вроде этого:

Public Sub Main()
   Set userStream = New objUser
   msgbox objUser.firstname
   msgbox objUser.lastname
   msgbox objUser.username
End Sub

Редактировать: чтобы объяснить, у меня есть этот библиотечный скрипт, который называется 'libGetUserProperties'. В этом я хочу функцию и класс.Затем я просто импортирую этот библиотечный скрипт в реальный скрипт, который выполняется во время выполнения.Выглядит это так:

libGetUserProperties:

Public Function getobjUser(ByRef Request, ByVal From)
    Dim thisUserObject
    Set thisUserObject = New objUser

    'If type = 0, data comes from AD
    If From = 0 Then
        thisUserObject.firstname = "some string"
        thisUserObject.lastname = "some string"  
    End If

    'If type = 1, data comes from Request stream
    If From = 1 Then
        thisUserObject.firstname = "some string"
        thisUserObject.lastname = "some string"    
    End If    

    Set getobjUser = thisUserObject

End Function

Class objUser
    Public firstname 
    Public lastname 
    Public username 
End Class' 

Вот как выглядит настоящий скрипт времени выполнения:

Dim libGetUserProperties
Set libGetUserProperties = ScriptLib.Load("Script Modules/Library Scripts/libGetUserProperties")

Sub onPreCreate(Request)

    Dim userStream
    Set userStream = New objUser
    'Do whatever with objUser which contains all of the properties I'm after
End Sub

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

Это невозможно с использованием VBScript, если вы не хотите динамически генерировать код для класса, включая свойства, сохранять его в файл и затем выполнять этот файл как скрипт.

Это намного прощеделать с помощью JScript.Поскольку Windows Scripting может работать как с JScript, так и с VBScript, я бы рекомендовал пойти по этому пути.

Если вам определенно нужен VBScript, лучше всего использовать Scripting.Dictionary, который будет содержать свойства в качестве ключей:

Dim dicUser
dicUser = CreateObject("Scripting.Dictionary")
dicUser("FirstName") = objUser.FirstName

, что позволит вам получить доступ к имени следующим образом:

dicUser("FirstName")

Обновление

Если вы хотитенаписать функцию, которая создает словарь и возвращает его, вот как это сделать в VBScript:

Function RememberTheUser(Request)
    Dim dicResult
    Set dicResult = CreateObject("Scripting.Dictionary")
    dicResult("FirstName") = Request.GetTheFirstName
    Set RememberTheUser = dicResult
End Function

, который затем может быть присвоен другой переменной:

Dim dicUser ' in the main section of the script, this means it's a global variable

Sub onPreCreate(Request)
  ' ...
  Set dicUser = RememberTheUser(Request)
  ' ...
End Sub


Sub onSomethingLater()
  WScript.Echo dicUser("FirstName") ' It's still accessible here
End Sub

В JScript это намного проще: просто создайте новый объект и добавьте новые свойства.

function readObject(dataSource) {
     var result = {};
     result.source = dataSource;
     result.firstName = dataSource.firstName;
     result['lastName'] = dataSource.FunctionThatGetsLastName();
}

Обратите внимание, что в JScript доступ к свойствам объекта можно получить с помощью нотации object.property, но также череззапись object['property'], которая очень полезна, когда у вас есть свойства с динамическим именем.('property' во второй записи является строкой и может быть заменено любым выражением, которое возвращает строку).

0 голосов
/ 24 марта 2011

При использовании VBScript отключенный набор записей также будет работать и, возможно, быстрее, чем словарь;см. здесь для примера.

...