Vbscript 用于修改多值Active Directory显示说明符的VBS脚本

Vbscript 用于修改多值Active Directory显示说明符的VBS脚本,vbscript,active-directory,Vbscript,Active Directory,按照howto,我可以设置一个单值模式属性,该属性可以通过ADUC中的上下文菜单轻松更改。多值模式属性变得相当复杂。假设(为了论证起见)我的值是“Projects”,每个用户可以根据需要列出任意多个项目 下面是一个将项目设置为单个值的小脚本: Dim oproject Dim oUser1 Dim temp1 Set oproject = Wscript.Arguments Set oUser1 = GetObject(oproject(0)) temp1 = InputBox("Project

按照howto,我可以设置一个单值模式属性,该属性可以通过ADUC中的上下文菜单轻松更改。多值模式属性变得相当复杂。假设(为了论证起见)我的值是“Projects”,每个用户可以根据需要列出任意多个项目

下面是一个将项目设置为单个值的小脚本:

Dim oproject
Dim oUser1
Dim temp1
Set oproject = Wscript.Arguments
Set oUser1 = GetObject(oproject(0))
temp1 = InputBox("Project: " & oUser1.project & vbCRLF & vbCRLF & "Project")
if temp1 <> "" then oUser1.Put "project",temp1
oUser1.SetInfo
Set oUser1 = Nothing
Set oproject = Nothing
Set temp1 = Nothing
WScript.Quit
Dim-oproject
暗室1
暗节拍1
Set-oproject=Wscript.Arguments
设置USER1=GetObject(oproject(0))
temp1=输入框(“项目:&user1.Project&vbCRLF&vbCRLF&“项目”)
如果temp1为“”,则USER1.Put为“项目”,temp1为“”
user1.SetInfo
设置为1=无
Set-oproject=Nothing
设置temp1=无
WScript.Quit

如何修改它以允许、分配和修改多个值?

我放弃了一个优雅的UI,只使用分号分隔的列表。如果有人在乎,下面是代码:

Dim objProject
Dim objUser
Dim temp1, title, message, default
Dim projects
title = "Projects"

Set objProject = Wscript.Arguments
Set objUser = GetObject(objProject(0))

'Find our current projects
projects = objUser.projects
If Not isArray(projects) Then
    projects = Array(projects)
End If

'Setup our message box
message = "Semicolon-delimited list of Projects"
default = arrayToStr(projects)
temp1 = InputBox(message, title, default)

'catch cancels
if IsEmpty(temp1) Then
    WScript.Quit
End If

' update our data
projects = strToArray(temp1)
objUser.Put "projects",projects
objUser.SetInfo

'Clean up and quit
Set projects = Nothing
Set objUser = Nothing
Set objProject = Nothing
Set temp1 = Nothing
Set title = Nothing
Set message = Nothing
Set default = Nothing
WScript.Quit

'Functions
Function strToArray(s)
    Dim a
    Dim token

    ' discard blank entries
    For Each token in split(s, ";")
        token = trim(token)
        If token <> "" Then
            If isEmpty(a) Then
                a = token
            Else
                a = a & ";" & token
            End If
        End If
    Next

    ' return array
    strToArray = split(a, ";")
End Function
Function arrayToStr(a)
    Dim s
    Dim token

    For Each token in a
        If isEmpty(s) Then
            s = token
        Else
            s = s & ";" & token
        End If
    Next

    ' return string
    arrayToStr = s
End Function
Dim对象项目
暗色objUser
Dim temp1、标题、消息、默认值
Dim项目
title=“项目”
Set objProject=Wscript.Arguments
Set objUser=GetObject(objProject(0))
“找到我们当前的项目
projects=objUser.projects
如果不是isArray(项目),那么
项目=数组(项目)
如果结束
'设置我们的消息框
message=“以分号分隔的项目列表”
默认值=arrayToStr(项目)
temp1=输入框(消息、标题、默认值)
“渔获量取消
如果我是空的(temp1),那么
WScript.Quit
如果结束
更新我们的数据
projects=strotarray(temp1)
把“项目”放进去,项目
objUser.SetInfo
"清理干净,退出"
设置项目=无
Set objUser=Nothing
Set objProject=Nothing
设置temp1=无
设置标题=无
设置消息=无
设置默认值=无
WScript.Quit
"功能",
函数strotarray(个)
暗淡的
暗号
'放弃空白条目
对于拆分中的每个标记,“;”)
令牌=修剪(令牌)
如果标记为“”,则
如果我是空的,那么
a=代币
其他的
a=a&“;”标记(&T)
如果结束
如果结束
下一个
'返回数组
strotarray=split(a,“;”)
端函数
函数arrayToStr(a)
暗淡的
暗号
对于
如果我是空的,那么
s=令牌
其他的
s=s&“;”标记(&T)
如果结束
下一个
'返回字符串
arrayToStr=s
端函数