Скрипт VBS для изменения многозначного спецификатора отображения Active Directory - PullRequest
0 голосов
/ 23 июня 2009

Следуя инструкции Расширение схемы Active Directory для отслеживания настраиваемой информации Я могу настроить атрибут схемы с одним значением, который можно легко изменить через контекстное меню в ADUC. Многозначные атрибуты схемы значительно усложняются. Скажем (ради аргумента) мое значение - «Проекты», и каждый пользователь может составить список столько проектов, сколько необходимо.

Ниже приведен печальный маленький скрипт, который установит Project в одно значение:

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

Как я могу изменить это, чтобы разрешить, назначить и изменить несколько значений?

1 Ответ

1 голос
/ 23 июня 2009

Я отказался от элегантного пользовательского интерфейса и просто пошел со списком, разделенным точкой с запятой. Вот код, если кому-то все равно:

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
...