Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBScript/JScript/WSH/WMI/HTA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/17: Рейтинг темы: голосов - 17, средняя оценка - 4.65
xBOBeRx
8 / 8 / 0
Регистрация: 17.12.2014
Сообщений: 24
1

Создать пользователя в AD и добавить права определенной группе

29.12.2014, 11:18. Просмотров 3267. Ответов 14
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчане. Я только начал изучать VBS, принцип вообщем то мне понятен, только вот не хватает знаний. Помогите пожалуйста в создании следующего скрипта.
Хочу немного облегчить рутинную работу админа. Необходимо создавать в AD сразу 2х пользователей + 2 компа + группа + включить этих 2х пользователей в определенные группы в AD (причем обоих в разные группы), а так же добавить одному из них определенные права на определенную группу в безопасности.
У всех создаваемых объектов есть общая часть в названии. т.е.
пользователи:
CN=Пользователь1 число,OU=users,OU=uroven1,OU=uroven1,DC=domen,DC=local
CN=Пользователь2 число,OU=users,OU=uroven1,OU=uroven1,DC=domen,DC=local
У каждого пользователя логин: число-a и число-b соответственно.
так же каждому пользователю надо задать пароль

группа:
CN=gruppчисло,OU=users,OU=uroven1,OU=uroven1,DC=domen,DC=local

компы:
CN=comp1число,OU=PC,OU=uroven1,OU=uroven2,DC=domen,DC=local
CN=comp2число,OU=PC,OU=uroven1,OU=uroven2,DC=domen,DC=local

красным шрифтом выделено число которое одинаково для всех объектов

Вот что я начал делать:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
shnum = inputbox("Введите № объекта")
strLine = shnum
 
DomainDN = "dc=domen, dc=local"
usrm = "CN=Пользователь1 " & strLine
usrt = "CN=Пользователь2 " & strLine
loginm = strLine & "-a"
logint = strLine & "-b"
comp1 = "CN=comp1" & strLine
comp2 = "CN=comp2" & strLine
grpshop = "CN=grupp" & strLine
 
Set objContainer = GetObject("LDAP: //OU=uroven2,DC=domen,DC=local")
Set objUser = objContainer.Create("User", usrm & ",OU=user,OU=uroven1")
objUser.Put "samAccountName", loginm
objUser.Put "sn", "Usser" & strLine
objUser.Put "givenName", usrm
objUser.Put "DisplayName", "Пользован" & strLine
objUser.SetPassword "12345"
objUser.AccountDisabled = False
objUser.SetInfo ()
WScript.Echo "Скрипт выполнен"

но вот уперся:
1) скрипт запускается и просит ввести данные, но после ввода и нажатия на ОК, скрипт выдает ошибку на строке 19 символ 1
2) не пойму как же дальше сделать внесение остальных данных.

Если не сложно помогите и огромная просьба учесть то что я только начал изучать VBS по этому по возможности небольшие коменты.

Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2014, 11:18
Ответы с готовыми решениями:

Расширить права обычного пользователя на Windows 7
Здравствуйте. Ребят, босс поставил задачу, кто может знать о правилах...

Расширить права для обычного пользователя
Добрый день! Как в windows 7, расширить права для обычного пользователя (тип...

как создать пользователя с правами системного администратора без права передавать эти права другим пользователям??
Здравствуйте! Подскажите как создать пользователя с правами системного...

Как добавить на файл hosts полные права группе "Сетевая служба" и перезапустить службу dns-клиент?
Добрый день. В журнале виндовс частая ошибка "DNS Client При попытке чтения...

Создать пользователя и дать права на папку
Добрый день. В Linux'е не шибко силен, но возникла задача. CentOS 6 Нужно...

14
buggydancer
250 / 238 / 16
Регистрация: 31.12.2009
Сообщений: 324
29.12.2014, 12:11 2
Цитата Сообщение от xBOBeRx Посмотреть сообщение
...скрипт выдает ошибку на строке 19...
А что за ошибка? Синтаксическая, AD? Может по ее (ошибки) номеру и описанию
удастся понять что он (скрипт) хочет: "прав", там, не хватает, символов в
пароле, или пароль по сложности не проходит?

PS: если ее (19 строку) закомментировать то скрипт отработает?
0
xBOBeRx
8 / 8 / 0
Регистрация: 17.12.2014
Сообщений: 24
29.12.2014, 12:37  [ТС] 3
Ошибка: Такой объект на сервере отсутствует
Код: 80072030
Источник: Active Directory

Основная проблема в том что я не знаю всех команд для работы с AD и плюс я не знаю как завести пользователя именно в тот контейнер который мне надо.
Если строку 19 закоментить, то скрипт выдает ту же ошибку только уже на следующую строку
0
buggydancer
250 / 238 / 16
Регистрация: 31.12.2009
Сообщений: 324
29.12.2014, 13:39 4
Именно по ошибке: 80072030 гугл выдает эту ссылку:
http://support.microsoft.com/KB/272147

А про список всех команд ADSI наверное где нибудь здесь:
http://msdn.microsoft.com/en-us/library/aa746512%28v=vs.85%29.aspx

Ну и примеры на форумах TechNet: https://social.technet.microsoft.com/Forums/en-US/home

что то вроде этого примера:
https://social.technet.microsoft.com...dsi?forum=ITCG

PS: у меня самого AD нет, проверить немогу *sorry*
0
xBOBeRx
8 / 8 / 0
Регистрация: 17.12.2014
Сообщений: 24
29.12.2014, 14:47  [ТС] 5
Большое спасибо за ссылки, постараюсь по изучать, проблема упирается еще и в то что я не очень хорошо знаю английский. Но все равно спасибо за помощь пороюсь может что и найду. Если у кого то есть какие-то еще или ссылки (желательно на русскоязычные сайты) или можете что то подсказать по самому скрипту, буду очень благодарен.
0
Dmitrii
2603 / 535 / 107
Регистрация: 21.03.2012
Сообщений: 1,043
30.12.2014, 23:51 6
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... включить этих 2х пользователей в определенные группы в AD (причем обоих в разные группы)...
По указанным Вами исходным данным идентифицировать можно только одну группу.

Цитата Сообщение от xBOBeRx Посмотреть сообщение
... добавить одному из них определенные права на определенную группу в безопасности...
О чём конкретно идёт речь:
1) о настройке атрибута managedBy объекта группы?
2) о нестандартной настройке DACL дескриптора безопасности объекта группы?
3) о чём-то ещё (о чём именно)?
Если речь о пункте 2, то настоятельно советую выполнить требуемые действия вручную, а не сценарием, не забыв перед этим создать резервную копию AD.

Цитата Сообщение от xBOBeRx Посмотреть сообщение
... Ошибка: Такой объект на сервере отсутствует...
Неправильно создаёте объект для пользовательской "учётки".
Кстати, в описании исходных данных путь к "учётке" задан как
OU=users,OU=uroven1,OU=uroven1,DC=domen,DC=local
А в тексте сценария как
OU=users,OU=uroven1,OU=uroven2,DC=domen,DC=local
Какой вариант правильный?

Цитата Сообщение от xBOBeRx Посмотреть сообщение
... Необходимо создавать в AD <...> + 2 компа...
Зачем "учётки" компьютеров создавать сценарием? Они прекрасно создадутся автоматически в момент присоединения узла к домену.

Пример сценария ниже (без реализации пункта об изменении полномочий пользователя).
На практике он не проверялся, поэтому, вероятно, потребуется отладка. Сам проверить не имею возможности.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Dim objRegExp, strLine
Dim objContainer, objUser, objGroup, objComputer, usr, login, comp, i
Const DomainDN = "dc=domen,dc=local"
Const ADS_UF_WORKSTATION_TRUST_ACCOUNT = 4096
 
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "\D"
strLine = InputBox("Введите № объекта")
If Len(strLine) > 0 Then
    If objRegExp.Test(strLine) Then
        WScript.Echo "Заданное значение не яляется числом."
    Else
        usr = Array("Пользователь1 " & strLine, "Пользователь2 " & strLine)
        login = Array(strLine & "-a", strLine & "-b")
        comp = Array("comp1" & strLine, "comp2" & strLine)
        On Error Resume Next
        Set objContainer = GetObject("LDAP://OU=users,OU=uroven1,OU=uroven1,DC=domen,DC=local")
        If Err.Number = 0 Then
            For i = 0 To UBound(usr)
                Set objUser = objContainer.Create("User", "CN=" & usr(i))
                If Err.Number = 0 Then
                    objUser.Put "samAccountName", usr(i)
                    If Err.Number = 0 Then
                        objUser.Put "userPrincipalName", login(i)
                        If Err.Number <> 0 Then
                            WScript.Echo "Ошибка " & Err.Number & " задания значения атрибута userPrincipalName объекта " & usr(i) & vbNewLine & Err.Description
                            Err.Clear
                        End If
                        objUser.Put "sn", "Usser" & strLine
                        If Err.Number <> 0 Then
                            WScript.Echo "Ошибка " & Err.Number & " задания значения атрибута sn объекта " & usr(i) & vbNewLine & Err.Description
                            Err.Clear
                        End If
                        objUser.Put "givenName", usr(i)
                        If Err.Number <> 0 Then
                            WScript.Echo "Ошибка " & Err.Number & " задания значения атрибута givenName объекта " & usr(i) & vbNewLine & Err.Description
                            Err.Clear
                        End If
                        objUser.Put "displayName", "Пользован" & strLine
                        If Err.Number <> 0 Then
                            WScript.Echo "Ошибка " & Err.Number & " задания значения атрибута displayName объекта " & usr(i) & vbNewLine & Err.Description
                            Err.Clear
                        End If
                        objUser.SetPassword "12345"
                        If Err.Number <> 0 Then
                            WScript.Echo "Ошибка " & Err.Number & " назначения пароля объекта " & usr(i) & vbNewLine & Err.Description
                            Err.Clear
                        End If
                        objUser.AccountDisabled = False
                        If Err.Number <> 0 Then
                            WScript.Echo "Ошибка " & Err.Number & " изменения статуса объекта " & usr(i) & vbNewLine & Err.Description
                            Err.Clear
                        End If
                        objUser.SetInfo
                        If Err.Number = 0 Then
                            WScript.Echo "Объект " &usr(i) & " создан успешно."
                            Set objGroup = GetObject("LDAP://CN=grupp" & strLine & ",OU=users,OU=uroven1,OU=uroven1,DC=domen,DC=local")
                            If Err.Number = 0 Then
                                objGroup.Add objUser.ADSPath
                                If Err.Number <> 0 Then
                                    WScript.Echo "Ошибка " & Err.Number & " добавления в группу объекта " & usr(i) & vbNewLine & Err.Description
                                    Err.Clear
                                End If
                            Else
                                WScript.Echo "Ошибка " & Err.Number & " привязки к объекту группы." & vbNewLine & Err.Description
                                Err.Clear
                            End If
                        Else
                            WScript.Echo "Ошибка " & Err.Number & " сохранения значений атрибутов объекта " & usr(i) & vbNewLine & Err.Description
                            Err.Clear
                        End If
                    Else
                        WScript.Echo "Ошибка " & Err.Number & " задания значения атрибута samAccountName объекта " & usr(i) & vbNewLine & Err.Description
                        Err.Clear
                    End If
                Else
                    WScript.Echo "Ошибка " & Err.Number & " создания объекта " & usr(i) & vbNewLine & Err.Description
                    Err.Clear
                End If
            Next
            Set objUser = Nothing: Set objContainer = Nothing: Set objGroup = Nothing
        Else
            WScript.Echo "Ошибка " & Err.Number & " привязки к контейнеру пользователей." & vbNewLine & Err.Description
            Err.Clear
        End If
        Set objContainer = GetObject("LDAP://OU=PC,OU=uroven1,OU=uroven2,DC=domen,DC=local")
        If Err.Number = 0 Then
            For i = 0 To UBound(comp)
                Set objComputer = objContainer.Create("Computer", "CN=" & comp(i))
                If Err.Number = 0 Then
                    objComputer.Put "sAMAccountName", comp(i) & "$"
                    If Err.Number = 0 Then
                        objComputer.Put "userAccountControl", ADS_UF_WORKSTATION_TRUST_ACCOUNT
                        If Err.Number = 0 Then
                            objComputer.SetInfo
                            If Err.Number = 0 Then
                                WScript.Echo "Объект " & comp(i) & " создан успешно."
                            Else
                                WScript.Echo "Ошибка " & Err.Number & " сохранения значений атрибутов объекта " & comp(i) & vbNewLine & Err.Description
                                Err.Clear
                            End If
                        Else
                            WScript.Echo "Ошибка " & Err.Number & " задания значения атрибута userAccountControl объекта " & comp(i) & vbNewLine & Err.Description
                            Err.Clear
                        End If
                    Else
                        WScript.Echo "Ошибка " & Err.Number & " задания значения атрибута samAccountName объекта " & comp(i) & vbNewLine & Err.Description
                        Err.Clear
                    End If
                Else
                    WScript.Echo "Ошибка " & Err.Number & " создания объекта " & comp(i) & vbNewLine & Err.Description
                    Err.Clear
                End If
            Next
        Else
            WScript.Echo "Ошибка " & Err.Number & " привязки к контейнеру компьютеров." & vbNewLine & Err.Description
            Err.Clear
        End If
    End If
End If
Set objRegExp = Nothing
WScript.Quit 0


P.S.
Честно говоря, озадачивает мешанина в именованиях. В частности то, что значения атрибутов sn и displayName у разных "учёток" будут попарно совпадать.
3
xBOBeRx
8 / 8 / 0
Регистрация: 17.12.2014
Сообщений: 24
05.01.2015, 12:24  [ТС] 7
Уважаемый Dmitrii!
Большое спасибо что откликнулись, вот комментарии по вашим вопросам и по работе скрипта:
Цитата Сообщение от Dmitrii Посмотреть сообщение
Сообщение от xBOBeRx
... включить этих 2х пользователей в определенные группы в AD (причем обоих в разные группы)...
По указанным Вами исходным данным идентифицировать можно только одну группу.
Просто остальные группы я не указывал, их по несколько штук у каждого и находятся они в разных контейнерах. Я подумал что сам осилю если будет какой то образец.
Цитата Сообщение от Dmitrii Посмотреть сообщение
Сообщение от xBOBeRx
... добавить одному из них определенные права на определенную группу в безопасности...
О чём конкретно идёт речь:
1) о настройке атрибута managedBy объекта группы?
2) о нестандартной настройке DACL дескриптора безопасности объекта группы?
3) о чём-то ещё (о чём именно)?
Если речь о пункте 2, то настоятельно советую выполнить требуемые действия вручную, а не сценарием, не забыв перед этим создать резервную копию AD.
Когда открываешь свойства пользователя в AD, там есть закладка "Безопасность" вот именно в ней мне надо добавить группу (которая создается этим скриптом) и в на эту группу данному пользователю дать разрешение на "Отправить как"

Цитата Сообщение от Dmitrii Посмотреть сообщение
Кстати, в описании исходных данных путь к "учётке" задан как
OU=users,OU=uroven1,OU=uroven1,DC=domen,DC=local
А в тексте сценария как
OU=users,OU=uroven1,OU=uroven2,DC=domen,DC=local
Какой вариант правильный?
Прошу прощения тут я опечатался, правильный второй вариант, т.е.
OU=users,OU=uroven1,OU=uroven2,DC=domen,DC=local

Цитата Сообщение от Dmitrii Посмотреть сообщение
Сообщение от xBOBeRx
... Необходимо создавать в AD <...> + 2 компа...
Зачем "учётки" компьютеров создавать сценарием? Они прекрасно создадутся автоматически в момент присоединения узла к домену.
Это необходимо сделать, чтобы компы находились в определенном контейнере сразу, иначе они попадают в другой контейнер.
Цитата Сообщение от Dmitrii Посмотреть сообщение
Пример сценария ниже (без реализации пункта об изменении полномочий пользователя).
На практике он не проверялся, поэтому, вероятно, потребуется отладка. Сам проверить не имею возможности.
Проверил работу скрипта и вот что получилось:
Компьютеры заводятся замечательно и в нужном контейнере
С пользователями есть проблема:
Не задается пароль выводится ошибка: Такой объект на сервере отсутствует
Не изменяется статус пользователя, выводится ошибка: Свойства службы каталогов не могут быть найдены в кэше.
Такое ощущение что эти действия производятся до того как создается пользователь.
Так же не происходит привязки пользователя к группе, т.к. группа просто не создается.

Цитата Сообщение от Dmitrii Посмотреть сообщение
P.S.
Честно говоря, озадачивает мешанина в именованиях. В частности то, что значения атрибутов sn и displayName у разных "учёток" будут попарно совпадать.
Прошу прощения, не уточнил, у второго пользователя sn должно быть пустое, а displayName должно быть такое же как и samAccountName

P.S. Еще раз большое спасибо за то что откликнулись!
0
Dmitrii
2603 / 535 / 107
Регистрация: 21.03.2012
Сообщений: 1,043
06.01.2015, 00:36 8
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... правильный второй вариант...
Внесите соответствующие изменения в пример сценария, т.к. я ориентировался на первый вариант.
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... Не задается пароль выводится ошибка: Такой объект на сервере отсутствует...
Задайтесь парой вопросов:
1) соответствует ли пароль, указанный в примере сценария, требованиям действующей в рамках домена политики паролей?
2) хватает ли "учётке", из-под которой запускается сценарий, полномочий на требуемое действие?

Цитата Сообщение от xBOBeRx Посмотреть сообщение
... Не изменяется статус пользователя, выводится ошибка: Свойства службы каталогов не могут быть найдены в кэше...
Объект пользовательской "учётки" не создан.
Во-первых, надо разобраться с предыдущей ошибкой.
Во-вторых, надо удалить фрагмент
Visual Basic
1
2
3
4
5
objUser.AccountDisabled = False
If Err.Number <> 0 Then
    WScript.Echo "Ошибка " & Err.Number & " изменения статуса объекта " & usr(i) & vbNewLine & Err.Description
    Err.Clear
End If
и разместить после оператора
Visual Basic
1
WScript.Echo "Объект " &usr(i) & " создан успешно."
фрагмент
Visual Basic
1
2
3
4
5
6
7
objUser.AccountDisabled = False
If Err.Number = 0 Then
    objUser.SetInfo
Else
    WScript.Echo "Ошибка " & Err.Number & " изменения статуса объекта " & usr(i) & vbNewLine & Err.Description
    Err.Clear
End If
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... группа просто не создается...
Такое действие в исходном примере не предусмотрено. Пример по созданию объекта группы безопасности типа "Локальная в домене":
Visual Basic
1
2
3
4
5
6
7
Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000
Set objOU = GetObject("LDAP://OU=users,OU=uroven1,OU=uroven2,DC=domen,DC=local")
Set objGroup = objOU.Create("Group", "CN=grupp" & strLine)
objGroup.Put "sAMAccountName", "grupp" & strLine
objGroup.Put "groupType", ADS_GROUP_TYPE_LOCAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED
objGroup.SetInfo
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... у второго пользователя sn должно быть пустое, а displayName должно быть такое же как и samAccountName
При такой разнотипности настроек вижу единственный способа автоматизации - предварительное создание файла с исчерпывающим набором исходных данных для сценария.

Цитата Сообщение от xBOBeRx Посмотреть сообщение
... Когда открываешь свойства пользователя в AD, есть закладка "Безопасность" вот именно в ней мне надо добавить группу (которая создается этим скриптом) и на эту группу данному пользователю дать разрешение на "Отправить как"...
Во-первых, исходный совет остаётся в силе: выполняйте указанное действие вручную с помощью графического интерфейса оснастки "Пользователи и компьютеры". Во-вторых, сдаётся мне, что в указанном случае править надо DACL дескриптора безопасности объекта группы, а не объекта пользователя.
Если всё-таки очень хочется полной автоматизации, то начните с изучения структуры дескриптора безопасности объектов нужных типов. В качестве ознакомительного материала - пара примеров сценариев из набора "Portable Script Center":
a) List Security Permissions for a User Account
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Const SE_DACL_PROTECTED = &H1000 
 
Set objUser = GetObject _
    ("LDAP://cn=MyerKen,ou=Management,dc=NA,dc=fabrikam,dc=com")
 
Set objNtSecurityDescriptor = objUser.Get("ntSecurityDescriptor")
intNtSecurityDescriptorControl = objNtSecurityDescriptor.Control
 
WScript.Echo "Permissions Tab"
strMessage = "Allow inheritable permissions from the parent to " & _
    "propogate to this object and all child objects "
If (intNtSecurityDescriptorControl And SE_DACL_PROTECTED) Then
    Wscript.Echo strMessage & "is disabled."
Else
    WScript.Echo strMessage & "is enabled."
End If
WScript.Echo 
 
Set objDiscretionaryAcl = objNtSecurityDescriptor.DiscretionaryAcl
DisplayAceInformation objDiscretionaryAcl, "DACL"
 
Sub DisplayAceInformation(SecurityStructure, strType)
    Const ADS_ACETYPE_ACCESS_ALLOWED = &H0 
    Const ADS_ACETYPE_ACCESS_DENIED = &H1 
    Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5 
    Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6 
    intAceCount = 0
    For Each objAce In SecurityStructure
        strTrustee = Mid(objAce.Trustee,1,12)
        If StrComp(strTrustee, "NT AUTHORITY", 1) <> 0 Then
            intAceCount = intAceCount + 1
            WScript.Echo strType & " permission entry: " & intAceCount
            WScript.Echo "Name: " & objAce.Trustee
 
            intAceType = objAce.AceType
            If (intAceType = ADS_ACETYPE_ACCESS_ALLOWED Or _
                intAceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT) Then
                WScript.Echo "Type: Allow Access"
            ElseIf (intAceType = ADS_ACETYPE_ACCESS_DENIED Or _
                intAceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT) Then
                WScript.Echo "Type: Deny Acess"
            Else
                WScript.Echo "Acess Type Unknown."
            End If
            ReadBitsInAccessMask(objAce.AccessMask)
            WScript.Echo 
        End If
    Next
End Sub
 
Sub ReadBitsInAccessMask(AccessMask)
    Const ADS_RIGHT_DELETE = &H10000
    Const ADS_RIGHT_READ_CONTROL = &H20000
    Const ADS_RIGHT_WRITE_DAC = &H40000
    Const ADS_RIGHT_WRITE_OWNER = &H80000
    Const ADS_RIGHT_DS_CREATE_CHILD = &H1
    Const ADS_RIGHT_DS_DELETE_CHILD = &H2
    Const ADS_RIGHT_ACTRL_DS_LIST = &H4
    Const ADS_RIGHT_DS_SELF = &H8
    Const ADS_RIGHT_DS_READ_PROP = &H10
    Const ADS_RIGHT_DS_WRITE_PROP = &H20
    Const ADS_RIGHT_DS_DELETE_TREE = &H40
    Const ADS_RIGHT_DS_LIST_OBJECT = &H80
    Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100
 
    WScript.Echo VbCrLf & "Standard Access Rights"
    If (AccessMask And ADS_RIGHT_DELETE) Then _
        WScript.Echo vbTab & "-Delete an object."
    If (AccessMask And ADS_RIGHT_READ_CONTROL) Then _
        WScript.Echo vbTab & "-Read permissions."
    If (AccessMask And ADS_RIGHT_WRITE_DAC) Then _
        WScript.Echo vbTab & "-Write permissions."
    If (AccessMask And ADS_RIGHT_WRITE_OWNER) Then _
        WScript.Echo vbTab & "-Modify owner."
  
    WScript.Echo VbCrLf & "Directory Service Specific Access Rights"
    If (AccessMask And ADS_RIGHT_DS_CREATE_CHILD) Then _
        WScript.Echo vbTab & "-Create child objects."
    If (AccessMask And ADS_RIGHT_DS_DELETE_CHILD) Then _
        WScript.Echo vbTab & "-Delete child objects."
    If (AccessMask And ADS_RIGHT_ACTRL_DS_LIST) Then _
        WScript.Echo vbTab & "-Enumerate an object."
    If (AccessMask And ADS_RIGHT_DS_READ_PROP) Then _
        WScript.Echo vbTab & "-Read the properties of an object."
    If (AccessMask And ADS_RIGHT_DS_WRITE_PROP) Then _
        WScript.Echo vbTab & "-Write the properties of an object."
    If (AccessMask And ADS_RIGHT_DS_DELETE_TREE) Then _
        WScript.Echo vbTab & "-Delete a tree of objects"
    If (AccessMask And ADS_RIGHT_DS_LIST_OBJECT) Then _
        WScript.Echo vbTab & "-List a tree of objects."
 
    WScript.Echo VbCrLf & "Control Access Rights"
    If (AccessMask And ADS_RIGHT_DS_CONTROL_ACCESS) + _
        (AccessMask And ADS_RIGHT_DS_SELF) = 0 Then
            WScript.Echo "-None"
    Else 
        If (AccessMask And ADS_RIGHT_DS_CONTROL_ACCESS) Then _
            WScript.Echo vbTab & "-Extended access rights."
        If (AccessMask And ADS_RIGHT_DS_SELF) Then
            WScript.Echo vbTab & "-Active Directory must validate a property "
            WScript.Echo vbTab & " write operation beyond the schema " & _
                "definition "
            WScript.Echo vbTab & " for the attribute."
        End If
    End If
End Sub

b) Create a Computer Account For a Specific User
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
strComputer = "atl-pro-002"
strComputerUser = "fabrikam\lewjudy"
 
Const ADS_UF_PASSWD_NOTREQD = &h0020
Const ADS_UF_WORKSTATION_TRUST_ACCOUNT = &h1000
Const ADS_ACETYPE_ACCESS_ALLOWED = &h0
Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &h5
Const ADS_FLAG_OBJECT_TYPE_PRESENT = &h1
Const ADS_RIGHT_GENERIC_READ = &h80000000
Const ADS_RIGHT_DS_SELF = &h8
Const ADS_RIGHT_DS_WRITE_PROP = &h20
Const ADS_RIGHT_DS_CONTROL_ACCESS = &h100
 
Const ALLOWED_TO_AUTHENTICATE = _
    "{68B1D179-0D15-4d4f-AB71-46152E79A7BC}"
Const RECEIVE_AS = "{AB721A56-1E2f-11D0-9819-00AA0040529B}"
Const SEND_AS = "{AB721A54-1E2f-11D0-9819-00AA0040529B}"
Const USER_CHANGE_PASSWORD = _
    "{AB721A53-1E2f-11D0-9819-00AA0040529b}"
Const USER_FORCE_CHANGE_PASSWORD = _
    "{00299570-246D-11D0-A768-00AA006E0529}"
Const USER_ACCOUNT_RESTRICTIONS = _
    "{4C164200-20C0-11D0-A768-00AA006E0529}"
Const VALIDATED_DNS_HOST_NAME = _
    "{72E39547-7B18-11D1-ADEF-00C04FD8D5CD}"
Const VALIDATED_SPN = "{F3A64788-5306-11D1-A9C5-0000F80367C1}"
 
Set objRootDSE = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://cn=Computers," & _
    objRootDSE.Get("defaultNamingContext"))
 
Set objComputer = objContainer.Create _
    ("Computer", "cn=" & strComputer)
objComputer.Put "sAMAccountName", strComputer & "$"
objComputer.Put "userAccountControl", _
    ADS_UF_PASSWD_NOTREQD Or ADS_UF_WORKSTATION_TRUST_ACCOUNT
objComputer.SetInfo
 
Set objSecurityDescriptor = objComputer.Get("ntSecurityDescriptor")
Set objDACL = objSecurityDescriptor.DiscretionaryAcl
 
Set objACE1 = CreateObject("AccessControlEntry")
objACE1.Trustee    = strComputerUser
objACE1.AccessMask = ADS_RIGHT_GENERIC_READ
objACE1.AceFlags   = 0
objACE1.AceType    = ADS_ACETYPE_ACCESS_ALLOWED
 
Set objACE2 = CreateObject("AccessControlEntry")
objACE2.Trustee    = strComputerUser
objACE2.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objACE2.AceFlags   = 0
objACE2.AceType    = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objACE2.Flags      = ADS_FLAG_OBJECT_TYPE_PRESENT
objACE2.ObjectType = ALLOWED_TO_AUTHENTICATE
 
Set objACE3 = CreateObject("AccessControlEntry")
objACE3.Trustee    = strComputerUser
objACE3.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objACE3.AceFlags   = 0
objACE3.AceType    = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objACE3.Flags      = ADS_FLAG_OBJECT_TYPE_PRESENT
objACE3.ObjectType = RECEIVE_AS
 
Set objACE4 = CreateObject("AccessControlEntry")
objACE4.Trustee    = strComputerUser
objACE4.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objACE4.AceFlags   = 0
objACE4.AceType    = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objACE4.Flags      = ADS_FLAG_OBJECT_TYPE_PRESENT
objACE4.ObjectType = SEND_AS
 
Set objACE5 = CreateObject("AccessControlEntry")
objACE5.Trustee    = strComputerUser
objACE5.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objACE5.AceFlags   = 0
objACE5.AceType    = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objACE5.Flags      = ADS_FLAG_OBJECT_TYPE_PRESENT
objACE5.ObjectType = USER_CHANGE_PASSWORD
 
Set objACE6 = CreateObject("AccessControlEntry")
objACE6.Trustee    = strComputerUser
objACE6.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objACE6.AceFlags   = 0
objACE6.AceType    = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objACE6.Flags      = ADS_FLAG_OBJECT_TYPE_PRESENT
objACE6.ObjectType = USER_FORCE_CHANGE_PASSWORD
 
Set objACE7 = CreateObject("AccessControlEntry")
objACE7.Trustee    = strComputerUser
objACE7.AccessMask = ADS_RIGHT_DS_WRITE_PROP
objACE7.AceFlags   = 0
objACE7.AceType    = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objACE7.Flags      = ADS_FLAG_OBJECT_TYPE_PRESENT
objACE7.ObjectType = USER_ACCOUNT_RESTRICTIONS
 
Set objACE8 = CreateObject("AccessControlEntry")
objACE8.Trustee    = strComputerUser
objACE8.AccessMask = ADS_RIGHT_DS_SELF
objACE8.AceFlags   = 0
objACE8.AceType    = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objACE8.Flags      = ADS_FLAG_OBJECT_TYPE_PRESENT
objACE8.ObjectType = VALIDATED_DNS_HOST_NAME
 
Set objACE9 = CreateObject("AccessControlEntry")
objACE9.Trustee    = strComputerUser
objACE9.AccessMask = ADS_RIGHT_DS_SELF
objACE9.AceFlags   = 0
objACE9.AceType  = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objACE9.Flags  =  ADS_FLAG_OBJECT_TYPE_PRESENT
objACE9.ObjectType = VALIDATED_SPN
 
objDACL.AddAce objACE1
objDACL.AddAce objACE2
objDACL.AddAce objACE3
objDACL.AddAce objACE4
objDACL.AddAce objACE5
objDACL.AddAce objACE6
objDACL.AddAce objACE7
objDACL.AddAce objACE8
objDACL.AddAce objACE9
 
objSecurityDescriptor.DiscretionaryAcl = objDACL
objComputer.Put "ntSecurityDescriptor", objSecurityDescriptor
objComputer.SetInfo
0
xBOBeRx
8 / 8 / 0
Регистрация: 17.12.2014
Сообщений: 24
14.01.2015, 15:27  [ТС] 9
Цитата Сообщение от Dmitrii Посмотреть сообщение
Сообщение от xBOBeRx
... Не задается пароль выводится ошибка: Такой объект на сервере отсутствует...
Задайтесь парой вопросов:
1) соответствует ли пароль, указанный в примере сценария, требованиям действующей в рамках домена политики паролей?
2) хватает ли "учётке", из-под которой запускается сценарий, полномочий на требуемое действие?
Проблему решил, дело было не в правах учетки, а в том что оператор SetPassword так же как и оператор AccountDisabled будет корректно работать только после полного создания пользователя т.е. после оператора SetInfo

Цитата Сообщение от Dmitrii Посмотреть сообщение
Сообщение от xBOBeRx
... группа просто не создается...
Такое действие в исходном примере не предусмотрено. Пример по созданию объекта группы безопасности типа "Локальная в домене":
Это было описано в самом первом моем посте, с этим тоже разобрался (спасибо вашему примеру создания группы)
Цитата Сообщение от Dmitrii Посмотреть сообщение
При такой разнотипности настроек вижу единственный способа автоматизации - предварительное создание файла с исчерпывающим набором исходных данных для сценария.
А нельзя просто в одном скрипте поочередно создавать 2х пользователей со своими данными? Например просто добавить переменные для каждого пользователя свои?

И еще, решил создать еще один скрипт, который проверял бы есть ли эти объекты в AD (компы, пользователи, группа), если есть, то выводить имена компов, пользователей и группы, а если нет, то выводил бы какого именно объекта нет.
Создал вот такой скрипт:
Visual Basic
1
2
3
4
5
6
7
8
Dim User1, User2, Comp1, Comp2, Grp
strLine = InputBox("Введите № объекта")
Set Grp = GetObject("LDAP://CN=grupp" & strLine & ",OU=users,OU=uroven1,OU=uroven2,DC=domen,DC=local")
Set Comp1 = GetObject("LDAP://CN=commp1" & strLine & ",OU=PC,OU=uroven1,OU=uroven2,DC=domen,DC=local")
Set Comp2 = GetObject("LDAP://CN=commp2" & strLine & ",OU=PC,OU=uroven1,OU=uroven2,DC=domen,DC=local")
Set User1 = GetObject("LDAP://CN=Usser1 " & strLine & ",OU=users,OU=uroven1,OU=uroven2,DC=domen,DC=local")
Set User2 = GetObject("LDAP://CN=Usser2 " & strLine & ",OU=users,OU=uroven1,OU=uroven2,DC=domen,DC=local")
MsgBox ("Группа:" & VbCrLf & Grp.sAMAccountName & VbCrLf & VbCrLf & "Компьютеры:" & VbCrLf & Comp1.sAMAccountName & VbCrLf & Comp2.sAMAccountName & VbCrLf & VbCrLf & "Пользователи:" & VbCrLf & User1.givenName & VbCrLf & User2.givenName)
Но этот скрипт работает только если все эти объекты существуют в AD, а если нет хотя бы одного то скрипт сразу выдает ошибку. Надо как то нарисовать чтобы делалась проверка есть объект или нет и выводилось бы соответствующее сообщение есть он или нет в AD, но вот только я не могу пока понять как это реализовать.
1
Dmitrii
2603 / 535 / 107
Регистрация: 21.03.2012
Сообщений: 1,043
14.01.2015, 21:22 10
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... оператор SetPassword <...> будет корректно работать только после полного создания пользователя...
Да.

Не по теме:

Как быстро, однако, забывается то, с чем постоянно не сталкиваешься.


Цитата Сообщение от xBOBeRx Посмотреть сообщение
... Это было описано в самом первом моем посте...
Угу. Только я эту часть задачи "проморгал".
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... А нельзя просто в одном скрипте поочередно создавать 2х пользователей со своими данными? Например просто добавить переменные для каждого пользователя свои?..
Если хочется каждый раз при решении этой задачи править исходный код сценария, то можно, конечно. Только уж тогда имеет смысл для задания значений атрибутов пользоваться массивами (как это сделано в примере для атрибутов samAccountName и userPrincipalName), а не отдельными переменными. К тому же, вдруг захочется создавать "учётки" не двух, а, скажем, четырёх пользователей.
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... решил создать еще один скрипт, который проверял бы есть ли эти объекты в AD...
Такой вариант проверки очень неудобен, т.к. требует привязки к объекту по значению атрибута distinguishedName, которое может оказаться заранее неизвестным или просто ошибочным (что весьма вероятно).
Советую для организации такого поиска либо воспользоваться средствами ADO (поищите в этой ветке форума сценарии по ключу ADsDSOObject), либо средствами провайдера WinNT.
Последний способ мне представляется наиболее простым. Вот в качестве примера соответствующий сценарий:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
'Управление состоянием (вкл.|откл.) учётной записи заданного пользователя домена.
'Имя пользователя задаётся вручную.
'Для управления записью выполняется обращение к хозяину роли "Эмулятор PDC".
Dim objTemp, objComputer, strPDC
Dim objUser, objShell, objWsNet, strDomain
Dim strUser, blnStatus, strQuest, strRes, strTemp, xAnswer
 
'--- Процедура определения значения атрибута CN хозяина роли "Эмулятор PDC".
strTemp = GetObject("LDAP://" & GetObject("LDAP://rootDSE").Get("defaultNamingContext")).Get("fSMORoleOwner")
Set objTemp = GetObject("LDAP://" & strTemp)
Set objComputer = GetObject(objTemp.Parent)
strPDC = Mid(objComputer.Name, 4) 'отбрасываем служебную часть вида CN=
Set objComputer = Nothing: Set objTemp = Nothing
'------
strUser = Trim(InputBox("Имя управляемой записи:", "Включ.|отключ. учётной записи пользователя"))
If Len(strUser) > 0 Then
    On Error Resume Next
    Set objWsNet = CreateObject("WScript.Network")
    strDomain = objWsNet.UserDomain
    Set objWsNet = Nothing
    Set objUser = GetObject("WinNT://" & strDomain & "/" & strPDC & "/" & strUser & ",user")
    If Err.Number = 0 Then
        Set objShell = CreateObject("WScript.Shell")
        blnStatus = objUser.AccountDisabled
        If blnStatus Then
            strQuest = " отключена." & vbCr & "Включить?"
            strRes = " включена."
        Else
            strQuest = " включена." & vbCr & "Отключить?"
            strRes = " отключена."
        End If
        xAnswer = objShell.Popup("Сейчас учётная запись пользователя " & UCase(strUser) & strQuest, , _
                                   "Выбор действия", vbQuestion + vbYesNo)
        If xAnswer = vbYes Then
            objUser.AccountDisabled = Not blnStatus
            objUser.SetInfo
            If Err.Number = 0 Then
                WScript.Echo "Учётная запись пользователя " & UCase(strUser) & strRes
            Else
                WScript.Echo "Не удалось изменить статус учётной записи " & UCase(strUser) & "." & vbNewLine & _
                            "Код ошибки: " & Err.Number & vbNewLine & Err.Description
                Err.Clear
            End If
        End If
        Set objShell = Nothing
    Else
        WScript.Echo "Учётная запись " & UCase(strUser) & " не существует или недоступна." & vbNewLine & _
                    "Код ошибки: " & Err.Number & vbNewLine & Err.Description
        Err.Clear
    End If
    Set objUser = Nothing
End If
WScript.Quit 0


Цитата Сообщение от xBOBeRx Посмотреть сообщение
... Надо как то нарисовать чтобы делалась проверка есть объект или нет и выводилось бы соответствующее сообщение есть он или нет в AD, но вот только я не могу пока понять как это реализовать.
Например, с помощью проверки на (не)равенство нулю значения свойства Number объекта Err.
1
buggydancer
250 / 238 / 16
Регистрация: 31.12.2009
Сообщений: 324
15.01.2015, 20:18 11
Цитата Сообщение от Dmitrii Посмотреть сообщение
...Например, с помощью проверки на (не)равенство нулю значения свойства Number объекта Err...
если "Err.Number <> 0" значит уже есть какая-то ошибка, а вот какая именно: "80072030" там, или еще какая, её то и нужно отлавливать
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if Not Err.Number = 0 then
 
    If Err.Number = 80072030 then
        'здесь обработка ошибки номер "80072030"
    End if
 
    If Err.Number = 80072031 then
        'здесь обработка ошибки номер "80072031"
    End if
 
    ...
 
 
    'здесь обработка известных ошибок заканчивается,
    'начинаем беспомощно "ругаться" на неизвестные ошибки
    'пока юзеры не вынудят нас добавить обработку новых ошибок
    MsgBox "Unhandeled Error # " & Err.Number & vbCRLf & Err.Description
End IF
другое дело, что "отлавливать" ошибки хорошо-бы в шестнадцатиричном виде
(их так в гугле искать удобнее), а кроме того когда "вылетает" необрабатываемая ошибка, то
WSH не указывает номер строки с ошибкой, что не очень удобно =(
0
Dmitrii
2603 / 535 / 107
Регистрация: 21.03.2012
Сообщений: 1,043
15.01.2015, 20:51 12
Цитата Сообщение от buggydancer Посмотреть сообщение
... а вот какая именно: "80072030" там, или еще какая, её то и нужно отлавливать...
В рамках обсуждаемой задачи вполне достаточно знать код ошибки, возникающей при отсутствии объекта привязки. Более того, даже такая информация будет избыточной при гарантированном выполнении сценария из-под "учётки" с необходимыми привилегиями.
Цитата Сообщение от buggydancer Посмотреть сообщение
... "отлавливать" ошибки хорошо-бы в шестнадцатиричном виде...
Существует функция Hex():
Visual Basic
1
WScript.Echo Hex(80072030)
Цитата Сообщение от buggydancer Посмотреть сообщение
... их так в гугле искать удобнее...
Дело сугубо личных предпочтений.
Цитата Сообщение от buggydancer Посмотреть сообщение
... когда "вылетает" необрабатываемая ошибка, то
WSH не указывает номер строки с ошибкой...
Если речь об ошибке, возникающей там, где её возникновение не предусмотрено разработчиком, то это, по большей части, свидетельство изъяна в алгоритме сценария и (или) некачественно выполненной отладки.
1
xBOBeRx
8 / 8 / 0
Регистрация: 17.12.2014
Сообщений: 24
16.01.2015, 11:14  [ТС] 13
Цитата Сообщение от buggydancer Посмотреть сообщение
если "Err.Number <> 0" значит уже есть какая-то ошибка, а вот какая именно:
Дело в том что я не задавался целью выяснения ошибки, мне нужна была просто проверка, есть такой объект в AD или нет, и вот что у меня получилось:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
strLine = InputBox("Для проверки заведения объекта в AD," & vbNewLine & vbNewLine & "Введите № объекта:","Проверка заведения объекта в AD")
If strLine = "" Then
Wscript.Quit()
End If
On Error Resume Next
Set Grp = GetObject("LDAP://CN=GRUP" & strLine & ",OU=users,OU=uroven1,OU=uroven2,DC=domen,DC=local")
    If Err.Number <> 0 Then
        grpp = "  Группы GRUP" & strLine & " - НЕТ (!)" & vbNewLine & Err.Description
        Err.Clear
        else
        grpp = "  Группа " & Grp.sAMAccountName & " - Есть" & vbNewLine & Err.Description
                Err.Clear
    End If
Такие же проверки для остальных объектов (пользователей и компов)
и потом все эти данные вывожу через MsgBox
Visual Basic
1
MsgBox ("Группа:" & VbCrLf & Grpp & VbCrLf & "Компьютеры:" & VbCrLf & Compp1 & Compp2 & VbCrLf & "Пользователи:" & VbCrLf & Userr1 & Userr2)
Dmitrii Огромное человеческое СПАСИБО, за помощь и подсказки.
Вот возник еще вопрос. Есть ли какие то команды чтобы вывести справку по той или иной функции, как к примеру в ДОСе для какой то команды в командной строке можно набрать что то типо: copy /? и выведется довольно подробная информация по данной функции.
1
buggydancer
250 / 238 / 16
Регистрация: 31.12.2009
Сообщений: 324
16.01.2015, 14:28 14
Цитата Сообщение от Dmitrii Посмотреть сообщение
Существует функция Hex():
WScript.Echo Hex(80072030)
Точно! Спасибо! совсем забыл про нее, в голове крутились всякие:
Код
$ String
% Integer
& Long
! Single
# Double
&& _INTEGER64 (QB64 Only)
## _FLOAT

Examples:
MyName$
Num1%
Num2!
Answer!
PS: тяжело после новогодних праздников восстанавливаться...
0
Dmitrii
2603 / 535 / 107
Регистрация: 21.03.2012
Сообщений: 1,043
18.01.2015, 00:48 15
Цитата Сообщение от xBOBeRx Посмотреть сообщение
... Есть ли какие то команды чтобы вывести справку по той или иной функции, как к примеру в ДОСе...
Наличие интерактивной справки - привилегия интегрированных средств разработки или достаточно развитых редакторов исходных текстов.
Справку по инструментарию совпадающей части диалектов VB (VB/VBA/VBS), можно найти, например, в редактора VB-макросов, который входит в любой комплект пакета "MS Office". Прочую информацию надо искать либо на Интернет-ресурсах, либо в специализированных справочниках.
Вот типовой набор основных источников от MS:
MSDN
Знакомство со сценариями

Можете прислать через "приват" форума адрес электронной почты, вышлю несколько справочников в формате CHM (правда, довольно старых): "VBScript Tutorial" (1998 г.), "The Portable Script Center" (2004 г.), "Windows Script Host" (2005 г.).
Впрочем, если поищите на просторах Интернета, то, скорее всего, найдёте и поновее.
0
18.01.2015, 00:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2015, 00:48

Как создать пользователя и установить ему права?
создаю пользователя. создаю группу, устанавливаю нужные права. но при входе в...

Как создать пользователя который имеет права только на следующие действия:
Доброго времени суток! Есть пользователь, допустим test, как ограничить ему...

AD создать пользователя и добавить его в группу
Подскажите, как средствами c# AD создать пользователя в AD и добавить его в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru