none
Создаём юзера и поднимаем до локального админа. Трабл RRS feed

  • Вопрос

  • Я пишу скрипт который создаст юзера Ivanov на всех машинах а потом закину его в группу Администраторы

    strComputer = "."
    Set colAccounts = GetObject("WinNT://" & strComputer & "")
    Set objUser = colAccounts.Create("user", "Ivanov")
    objUser.SetPassword "09iu%4et"
    objUser.SetInfo

    Всё ок но когда смотрю в Панель управления Юзвери в Пользователи его нет а нахожу я его толь в Дополнительно       -> Допольнительно -> Пользователи.

    Дальше я хочу

    strComputer = "atl-ws-01"
    Set objGroup = GetObject("WinNT://" & strComputer & "/Администраторы,group")

    Set objUser = GetObject("WinNT://" & strComputer & "/Ivanov,user")
    objGroup.Add(objUser.ADsPath)


    Сервер сценариев ругается "Неудалось добавить или удаить члена локальной группы, так как он не существует"
    Винда ХР sp2 Русская

    Кто поскажет в чем трабл
    22 сентября 2007 г. 10:47

Ответы

  •  

    Полный скрипт такой

     

     

    Code Snippet

    strComputer = "HOSTNAME"
    Set colAccounts = GetObject("WinNT://" & strComputer & "")
    Set objUser = colAccounts.Create("user", "Ivanov")
    objUser.SetPassword "09iu%4et"
    objUser.SetInfo
    Set objGroup = GetObject("WinNT://" & strComputer & "/Администраторы,group")

     

     

    Set objUser = GetObject("WinNT://" & strComputer & "/Ivanov,user")  'можно не делать т.к. в одном файле и создание и добавлени, отдельно будешь добавлять в группу - недо делать поиск пользователя.

     

     

     

    objGroup.Add(objUser.ADsPath)

     

     

    HOSTNAME - это реальное название компьюетра должно быть, если будешь использовать точку или ip адрес, то добавление в группу не сработает, т.к. неверно сгенируреться ADsPath.

     

     

    2. В пользователях его не видно, потому что ты его в группу Пользователи не добавляешь, вот он тебе его только в продвинутом списке и показывает.

     

    3. Чтобы не менять каждый раз название компьютера можно использовать

     

    Code Snippet
    Set objNTInfo = CreateObject("WinNTSystemInfo")
    strComputer = objNTInfo.ComputerName

     

     


     

    В помощь http://www.microsoft.com/technet/scriptcenter/

     

     

     

    22 сентября 2007 г. 11:47

Все ответы

  •  

    Полный скрипт такой

     

     

    Code Snippet

    strComputer = "HOSTNAME"
    Set colAccounts = GetObject("WinNT://" & strComputer & "")
    Set objUser = colAccounts.Create("user", "Ivanov")
    objUser.SetPassword "09iu%4et"
    objUser.SetInfo
    Set objGroup = GetObject("WinNT://" & strComputer & "/Администраторы,group")

     

     

    Set objUser = GetObject("WinNT://" & strComputer & "/Ivanov,user")  'можно не делать т.к. в одном файле и создание и добавлени, отдельно будешь добавлять в группу - недо делать поиск пользователя.

     

     

     

    objGroup.Add(objUser.ADsPath)

     

     

    HOSTNAME - это реальное название компьюетра должно быть, если будешь использовать точку или ip адрес, то добавление в группу не сработает, т.к. неверно сгенируреться ADsPath.

     

     

    2. В пользователях его не видно, потому что ты его в группу Пользователи не добавляешь, вот он тебе его только в продвинутом списке и показывает.

     

    3. Чтобы не менять каждый раз название компьютера можно использовать

     

    Code Snippet
    Set objNTInfo = CreateObject("WinNTSystemInfo")
    strComputer = objNTInfo.ComputerName

     

     


     

    В помощь http://www.microsoft.com/technet/scriptcenter/

     

     

     

    22 сентября 2007 г. 11:47
  • Агромадное спасибо. Всё работает. А можно ещё такой вопрос. Смущает меня передача пароля в открытом виде. Можно ли както хранить пароль закрыто и какойто процедурой его получать и передавать.

    Типа
    пароль у юзера в AD или ещё где нибудь привязан. Скрипт спрашивает -> получает в перемееную и оттуда передаёт в нужное место.
    22 сентября 2007 г. 12:18
  • Посмотрите эту статью:

    http://old.osp.ru/win2000/2005/02/084.htm

     

    Дело в том, что скриптовые движки cscript  и wscript не содержат хороших встроенных средств для работы с паролями. Даже если будет запрошен пароль и вы будете вводить его с клавиатуры, вводимый пароль будет отображаться на экране открытым текстом.

    Если вы не планируете размещать административные сценарии на web-сервере, то хороший выход - использовать HTA-приложения. Они выполняются локально на движке Internet Explorer, выглядят как web-страницы, и там вы сможете предусмотреть поле ввода типа Password, в котором вводимая информация не будет отображаться открытым текстом. Подробнее см.

    http://www.microsoft.com/technet/scriptcenter/hubs/htas.mspx

    22 сентября 2007 г. 18:17
    Модератор
  • Спасибо.

    Продолжение.

    На моей машине скрипт отрабатывает (запускаю руками) а когда я его назначаю определенной машине та на ней нет.

    В GPM создаю новую GPO в которой в конфигурации компа -конфигурация винды - сценарии - автозагрузка - добавить в окне выбора файла делаю вставить ctrl+c 
    (скрипт копирую файлом со своей машины ctrl+v) Получается типа \\ляляля\SysVol\ляляля\Policies\{107E3702-00AD-4948-A5D8-462414FA7173}\Machine\Scripts\Startup\123.vbs 
    В OU делаяю на GPO линк в фильтрах пусто.

    В Grop Policy Results вижу

    Component Name Status Last Process Time
    Инфраструктура групповой политики Success 23.09.2007 14:29:07
    EFS recovery Success (no data) 23.09.2007 14:29:07
    Security Success 23.09.2007 14:29:07
    Реестр Success 23.09.2007 14:28:57
    Сценарии Failed 23.09.2007 14:28:58
    Сценарии failed due to the error listed below.

    Не удается найти указанный файл.

    Additional information may have been logged. Review the Policy Events tab in the console or the application event log for events between 23.09.2007 14:28:57 and 23.09.2007 14:28:58.


    И при пререзагрузке машины Юзер не добовляется





    23 сентября 2007 г. 12:30
  •  

    На мой взгляд, здесь какая-то простая ошибка. Попробуйте сначала запустить через групповые политики какой-нибудь простой скрипт, например, который создает файл на диске C:\ локального компьютера и что-нибудь туда пишет.

     

    А вот создать пользователя через политики все равно не сможете. Дело в том, что скрипт, запушенный через групповые политики компьютера, выполняется на рабочей станции в контексте Local System. Это, несомненно, весьма привилегированная встроенная учетная запись, но у нее нет прав на создание новых пользователей, сброс паролей и другие административные функции. 

    23 сентября 2007 г. 14:33
    Модератор
  • 1. Скрипты лучше складировать не по политикам а в нормальное место - общее. Например в SYSVOL выделить каталог Scripts и там их по типам складировать.

     

    2. Скрипт перед добавлением в политику надо положить в нужное место!

     

    3. После того как прошла файловая репликация скрипта, можно добавлять в политику ссылку на оный скрипт в Политику.

     

    Как-то вот так

    ------

     

    На тему прав доступа - все должно быть нормально. Коллега, Локальная Система по-умолчанию - имеет право и в группу Администраторов добавить и сброс локальных паролей сделать.

     

    25 сентября 2007 г. 9:45
  • Да, вы правы, спасибо за замечание по Local System. И ведь просто был уверен в обратном, пока не проверил сам!

     

    Тогда остается только одно замечание, касающееся присутствия в скрипте пароля адмистративного пользователя в открытом виде. По умолчанию, Authenticated Users могут читать содержимое Sysvol на домен-контроллерах, в том числе и скрипты групповых политик.

     

    25 сентября 2007 г. 16:49
    Модератор
  • Что-то как-то тут все не туда....

     

    Заводить пользователя через политику - фактически открытым скриптом! - устанавливать ему администраторские права, да еще и пароль - это дыра! Даже дырища

     

    Скрипт надо запускать у себя на машине локально (с правами админа на удаленную машину), так чтобы скприпт выполнялся против удаленной машины. Тогда не будет никаких открытых скприптов и тем более открытых паролей.

     

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

    1 октября 2007 г. 12:31
    Модератор
  • В самом деле, мы увлеклись обсуждением групповых политик, хотя у вашей задачи другое решение, причем стандартное.

    А если не хотите самостоятельно писать скрипты, то возьмите один из готовых - такие скрипты разрабатывались неоднократно. Мне тоже удалось в этом поучаствовать  - написал административный сценарий, оптимизированный для большого числа компьютеров.

    1 октября 2007 г. 20:56
    Модератор