我正在尝试一些事情。我有这个系统,在某些事件处理程序中触发了一堆脚本。在Active Directory中创建用户时使用此选项。
所以,我认为我需要的是一个基本上收集正在处理的用户的属性的函数 - 希望是一个对象。然后返回该对象并在其他函数和subs中使用它。这样我就可以使用“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
答案 0 :(得分:2)
使用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'
是一个字符串,可以被任何返回字符串的表达式替换。)
答案 1 :(得分:0)
保持VBScript,断开连接的记录集也可以正常工作,并且可能比字典更快;请参阅here以获取示例。