1 (изменено: TAOSoft, 2012-09-25 15:02:40)

Тема: VBScript: Добавление доменной группы в локальную группу. Сложность

Здравствуйте уважаемы знатоки!

Помогите понять можно или нет решить следующий вопрос.
Задача: Войдя в систему под локальным пользователем добавит в группу (локальную, например Администраторы) доменного пользователя (или группу). Думал прокатит скриптом ниже, но увы.... Ошибка....

strDCserver = "DC"
strAdminName = "Admin"
strAdminPass = "password"

Dim i, arrGroupNameAdd

Set WSHNetwork = CreateObject("WScript.Network")
strComputer    = WSHNetwork.ComputerName

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colGroups = objWMIService.ExecQuery("Select * from Win32_Group Where LocalAccount=True AND SID='S-1-5-32-544'")

For Each objGroup in colGroups
    Set ObjGroupAdm = GetObject("WinNT://" & strComputer & "/" & objGroup.Name & ",Group")

    sWSAdmins = "CN=AdminsGroup,OU=Group,OU=demo,DC=aaa,DC=zzz,DC=xxx,DC=ru"
    Set ObjGroupNameAdd = GetObject("LDAP:").OpenDSObject("LDAP://" & strDCserver & "/" & sWSAdmins, strAdminName, strAdminPass, ADS_SECURE_AUTHENTICATION)

'        Set ObjGroupNameAdd = GetObject("WinNT://REGIONS/AdminsGroup,Group")

    If Not ObjGroupAdm.IsMember(ObjGroupNameAdd.ADsPath) Then
        ObjGroupAdm.Add ObjGroupNameAdd.ADsPath
    End If


    Set ObjGroupNameAdd = Nothing
Next

Set colGroups = Nothing
Set objWMIService = Nothing
Set WSHNetwork = Nothing

2

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Может локальный админ не имееет прав добавлять доменные у/з? Может есть возможность запускать скрипт от имени доменной учетки (которая входит в группу локальных админов машин)?

WBR. Roman

3

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Про прова точно не то. Тоже действие на уровне оконного интерфейса проходят замечательно (при условии запуска скрипта от локального пользователя - администратора, а в теле скрипта использую существующею доменную запись). Как раз задача и состоит в том чтоб использовать альтернативный метод, позволяющий достич желающего результата.

4

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Я вижу как минимум две ошибки:

* не описана константа «ADS_SECURE_AUTHENTICATION»;
* Вы пытаетесь объекту, полученному посредством провайдера «WinNT:», «скормить» путь в формате провайдера «LDAP:».

Option Explicit

Dim strGroup

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx

Dim objIADsGroup_Local
Dim objIADsGroup_Global


strGroup = "bla-bla-bla"

strComputer = "."

Set objSWbemLocator     = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx  = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemObjectEx    = objSWbemServicesEx.Get("Win32_SID='S-1-5-32-544'")

Set objIADsGroup_Local  = GetObject("WinNT://" & strComputer & "/" & objSWbemObjectEx.AccountName & ",group")
Set objIADsGroup_Global = GetObject("WinNT://" & WScript.CreateObject("WScript.Network").UserDomain & "/" & strGroup & ",group")

If Not objIADsGroup_Local.IsMember(objIADsGroup_Global.ADsPath) Then
    objIADsGroup_Local.Add objIADsGroup_Global.ADsPath
End If

Set objIADsGroup_Global = Nothing
Set objIADsGroup_Local  = Nothing

Set objSWbemObjectEx    = Nothing
Set objSWbemServicesEx  = Nothing
Set objSWbemLocator     = Nothing

WScript.Quit 0

5

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

TAOSoft пишет:

Про прова точно не то. Тоже действие на уровне оконного интерфейса проходят замечательно
....

Я Вам на имейл отпарвил свой рабочий скрипт добавления на указанную машину в лок/группу (Remote Desktop Users) указанную доменную у/з

WBR. Roman

6

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

alexii пишет:

Я вижу как минимум две ошибки:

* не описана константа «ADS_SECURE_AUTHENTICATION»;
* Вы пытаетесь объекту, полученному посредством провайдера «WinNT:», «скормить» путь в формате провайдера «LDAP:».

Здравствуйте.
- не описана константа «ADS_SECURE_AUTHENTICATION», действительно дернул часть кода из основного скрипта, константу забыл описать....
- скормить лдап пытаюсь только по причине того, что возник ступор (возможность авторизации в домене) с WinNT.

За предложенные варианты спасибо (вот так я и не умел Set objSWbemObjectEx    = objSWbemServicesEx.Get("Win32_SID='S-1-5-32-544'"))....

Еще раз попытаюсь нарисовать что да как:

Есть:
Компьютер - CompName
Локальный пользователь CompName\Администратор
Локальная группа CompName\Администраторы

Домен - testDomain
(при необходимости, для авторизации в домене!!!) Доменный пользователь testDomain\testAdm
Доменная группа testDomain\WSAdmins

CompName заведен в testDomain, но вход в систему осуществил локальный пользователь CompName\Администратор (входящий в состав локальной группы CompName\Администраторы). Можно ли под CompName\Администратор добавить доменную группу testDomain\WSAdmins в локальную группу CompName\Администраторы.

Ваш вариант вываливает ошибку (Разрешение отклонено 'GetObject') на строку
Set objIADsGroup_Global = GetObject("WinNT://" & WScript.CreateObject("WScript.Network").UserDomain & "/" & strGroup & ",group")

WScript.CreateObject("WScript.Network").UserDomain - у меня не доменный пользователь, но даже при явном указании
Set objIADsGroup_Global = GetObject("WinNT://testDomain/" & strGroup & ",group") - ошибка Разрешение отклонено 'GetObject'

7

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Rom5 пишет:
TAOSoft пишет:

Про прова точно не то. Тоже действие на уровне оконного интерфейса проходят замечательно
....

Я Вам на имейл отпарвил свой рабочий скрипт добавления на указанную машину в лок/группу (Remote Desktop Users) указанную доменную у/з

Ваш скрипт будет работать при следующих условиях:
1 - Запуск скрипта осуществляется на админской машинке с коннектом на удаленную машину (что не подходит по условию моей задачи)
2 - Пользователь от лица которого запускается скрипт должен обладать админскими правами на удаленной машинке. (этого я и хочу добиться)

8

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Я не проверял такой вариант. Почему не используете доменную учётную запись?

Ваш вариант вываливает ошибку (Разрешение отклонено 'GetObject') на строку

Set objIADsGroup_Global = GetObject("WinNT://" & WScript.CreateObject("WScript.Network").UserDomain & "/" & strGroup & ",group")

WScript.CreateObject("WScript.Network").UserDomain - у меня не доменный пользователь, но даже при явном указании
Set objIADsGroup_Global = GetObject("WinNT://testDomain/" & strGroup & ",group") - ошибка Разрешение отклонено 'GetObject'

У меня в «strGroup» — «bla-bla-bla». А у Вас? По описанию — должно быть «WSAdmins». Кроме того, раз Вы исполняете скрипт под локальным пользователем, вместо «WScript.CreateObject("WScript.Network").UserDomain» указывайте «testDomain». Ну, и надо смотреть, может ли локальный администратор сие проделать вообще. Вы пробовали «ручками», работает?

9

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Давайте с самого начала. Что я вообще мучаю.

Делаю сетевую установку винды (что и как не про этот форум).
После установки запускается скрипт который:
1 - тестирует имя ПК на предмет "шаблона". При необходимости правит как надо...
2 - заводит комп в домен.
3 - ВОТ ТУТ Я И ЗАСТРЯЛ. Добавить доменную группу (WSAdmins) в лок админы.
4 - под доменным пользователем (из группы WSAdmins) делаю необходимые настройки ПК.

Не используется доменная учётную запись по причине того что я не совсем "полноценный администратор" (нет права testDomain\Domain Admins),
мне лишь на уровне домена доступна определенная OU, в которой я "царь и бог". Группу из доступной OU я и хочу прописать в лок группу,
пользователем которой и будет проводиться дальнейшая настройка.

"Ручками", как я упомянул ранее, все ок.
Т.е. Мой компьютер - Управление - Локальные пользователи - Группы - Администраторы. Добавить - ввожу testDomain\WSAdmins - запрашивает доменного пользователя обладающего правами в домене testDomain (указываю testDomain\testAdm) - проверить имя - Ок
Далее вход в систему можно делать под testDomain\testAdm с админскими правами на этом ПК.

10

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

3 - ВОТ ТУТ Я И ЗАСТРЯЛ. Добавить доменную группу (WSAdmins) в лок админы.

Исполняя приведённый выше скрипт под доменным пользователем, входящем в группу Domain Administrators и, соответственно, имеющем административные полномочия как в домене, так и на локальной машине (поскольку при выполнении п.2 группа Domain Administrators включается в локальную группу Administrators), Вы получаете те условия, в которых я исполнял вышеприведённый скрипт у себя. Разумеется, после п.2 нужна перезагрузка машины.

Я не пойму, почему Вы не хотите сделать это под доменным администратором?

11 (изменено: Rom5, 2012-09-27 11:03:18)

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

TAOSoft пишет:

"Ручками", как я упомянул ранее, все ок.
Т.е. Мой компьютер - Управление - Локальные пользователи - Группы - Администраторы. Добавить - ввожу testDomain\WSAdmins - запрашивает доменного пользователя обладающего правами в домене testDomain (указываю testDomain\testAdm) - проверить имя - Ок
Далее вход в систему можно делать под testDomain\testAdm с админскими правами на этом ПК.

Т.е. действие авторизуется этой доменной у/з.
В команде ".ConnectServer()" можно по идее третьим параметром указать имя своего доменного пользователя, а четвертым параметром - явно указать его пароль (есть смысл, конечно, не явно "забить" в код, а предварительно запрашивать через InputBox() ) - таким образом подключение и дальнейшие действия уже будут от имени Вашей доменной учетки.

WBR. Roman

12

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Не используется доменная учётную запись по причине того что я не совсем "полноценный администратор" (нет права testDomain\Domain Administrators), мне лишь на уровне домена доступна определенная OU, в которой я "царь и бог". Группу из доступной OU я и хочу прописать в лок группу, пользователем которой и будет проводиться дальнейшая настройка.

По корпоративным порядкам права админа домена мне ни кто НЕ ДАСТ. У нас очень сложная структура домена. У каждого города свой OU (+ свой "Администратор") в AD.

Вот я и интересуюсь возможностью автоматизации действия (руками то это же действие я делаю без каких либо помех) при выполнении определенных условий/ограничений.


PS:

* Вы пытаетесь объекту, полученному посредством провайдера «WinNT:», «скормить» путь в формате провайдера «LDAP:».

Я и думал как то "подружить" двух этих зверей на предмет авторизации в домене, но увы...

13

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Rom5 пишет:

Т.е. действие авторизуется этой доменной у/з.
В команде ".ConnectServer()" можно по идее третьим параметром указать имя своего доменного пользователя, а четвертым параметром - явно указать его пароль (есть смысл, конечно, не явно "забить" в код, а предварительно запрашивать через InputBox() ) - таким образом подключение и дальнейшие действия уже будут от имени Вашей доменной учетки.

.ConnectServer() - Это про что? Если про WbemScripting.SWbemLocator, то он вообще при работе с группами не участвует..... Поясните плиз, что вы подразумевали....

Народ предлагайте. Любые варианты рассмотрю, проверю, поправлю под себя....

14 (изменено: Rom5, 2012-09-27 12:31:41)

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

TAOSoft пишет:

.ConnectServer() - Это про что? Если про WbemScripting.SWbemLocator, то он вообще при работе с группами не участвует.....

Таки да - это я был не прав.

А до добавления в лок.группу старт скрипта от имени доменной учетки, например, через psExec.exe - тоже безуспешен?

Может попытаться на AutoIt скрипт работы с GUI попробовать сваять - но это будет какое-то извращение.

WBR. Roman

15

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Rom5 пишет:
TAOSoft пишет:

.ConnectServer() - Это про что? Если про WbemScripting.SWbemLocator, то он вообще при работе с группами не участвует.....

Таки да - это я был не прав.

А до добавления в лок.группу старт скрипта от имени доменной учетки, например, через psExec.exe - тоже безуспешен?

Имеет ли смысл запускать скрипт от какой либо записи домена, не имеющей прав на локальном компе? Ведь по задаче мне и надо "наделить" доменную уз пользователя/группы домена правами на лок машине, а если таких прав нет, то от кого будем psExec.exe запускать?

16 (изменено: TAOSoft, 2012-09-27 12:42:06)

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Rom5 пишет:

Может попытаться на AutoIt скрипт работы с GUI попробовать сваять - но это будет какое-то извращение.

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

17

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

OFF:

Я и думал как то "подружить" двух этих зверей на предмет авторизации в домене, но увы...

Подружить можно. Только нужно имена преобразовывать из одного стандарта в другой.

18

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Здравствуйте!

Как оказалось "а ларчик просто открывался....". OpenDSObject, как оказалось, с WinNT тож работает.....
Вот такой код вполне меня устроил:

Dim strGroup, strComputer, strDomain, strAdminName, strAdminPass
Dim objSWbemLocator, objSWbemServicesEx, objSWbemObjectEx
Dim objIADsGroup_Local, objIADsGroup_Global

Const ADS_SECURE_AUTHENTICATION = &H0001
'Const ADS_SERVER_BIND = &H0200

strGroup = "bla-bla-bla"

strComputer = "."
strDomain = "testDomain"

'Тут, лучше всего юзать inputbox
strAdminName = "Admin"
strAdminPass = "password"

Set objSWbemLocator     = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx  = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemObjectEx    = objSWbemServicesEx.Get("Win32_SID='S-1-5-32-544'")

Set objIADsGroup_Local  = GetObject("WinNT://" & strComputer & "/" & objSWbemObjectEx.AccountName & ",group")
Set objIADsGroup_Global = GetObject("WinNT:").OpenDSObject("WinNT://" & strDomain & "/" & strGroup & ",group", strAdminName, strAdminPass, ADS_SECURE_AUTHENTICATION)

If Not objIADsGroup_Local.IsMember(objIADsGroup_Global.ADsPath) Then _
    objIADsGroup_Local.Add objIADsGroup_Global.ADsPath

Set objIADsGroup_Global = Nothing
Set objIADsGroup_Local  = Nothing

Set objSWbemObjectEx    = Nothing
Set objSWbemServicesEx  = Nothing
Set objSWbemLocator     = Nothing

Всем спасибо!

19

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Приветствую всех участников форума!

Не знаю эту тему продолжить или же новую открыть, но вопрос следующий. В примере выше, пароль и юзер, указан явно, можно конечно inputbox задействовать. Но inputbox для имени еще можно смело использовать, а вот ввод пароля хотелось бы "защитить" от сторонних глаз. Нет ли у кого вариантов с защищенным вводом пароля (hta, иль еще как нибудь)

20

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

TAOSoft пишет:

В примере выше, пароль и юзер, указан явно, можно конечно inputbox задействовать. Но inputbox для имени еще можно смело использовать, а вот ввод пароля хотелось бы "защитить" от сторонних глаз. Нет ли у кого вариантов с защищенным вводом пароля (hta, иль еще как нибудь)

Я как-то воспользовался примером Xameleon из темы JScript: Создание окна, а также трансляция WScript в HTA для создания в vbs-скрипте окна для ввода/редактирования сразу нескольких параметров, мне там маскировать вводимое значение необходимости не было, но это легко добавить - "<input type=password ....>". Мой пример - скрипт scanNet.vbs в теме -- VBScript / WMI : Асинхронный мультипинг

WBR. Roman

21

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Здравствуйте! Заранее хочу сказать спасибо за то что ответили.
Решил затестить скрипт scannet.vbs..... В функции Function CreateWindow(content,features,x,y,width,height) ругается на For Each ShellWindow in ShellWindows: form_id = Clng(ShellWindow.id)..... Объект не поддерживает это свойство или метод 'ShellWindow.id'....
Не могли бы Вы посодействовать в устранении ошибки. Скрипт, для меня, кажется шибко мудреным. Сам его не пережую.....
Уж очень хочу посмотреть на работу scanNet.vbs.....

22

Re: VBScript: Добавление доменной группы в локальную группу. Сложность

Возьмите плз последний исходник со страницы проекта -http://code.google.com/p/small-scripts/ … canNet.vbs. И по ошибкам работы уже этого скрипта пишите в имейл, чтобы не оффтопить.
Можно посмотреть видео по работе скрипта - на странице: http://code.google.com/p/small-scripts/downloads/list

WBR. Roman