Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   Создание пользователей скриптом из Excel (http://forum.oszone.net/showthread.php?t=70330)

mikechaik 25-08-2006 19:09 476871

Создание пользователей скриптом из Excel
 
Собираюсь создать очень много пользователей через Excel. Предварительно забив их туда (в ексель). Забивать буду:
- Фамилия (1 столбец);
- Имя (2 столбец);
- Отчество (3 столбец);
- Имя входа в домен - тобишь пользователь (4 столбец);
- Пароль (5 столбец);
- OU (6 столбец);
Как в екселе сделать, чтобы 4 столбец формировался автоматом, т.е. если 1,2,3: Сидоров Антон Борисович, то 4 будет состоять из полной фамилии + инициалы - СидоровАБ

P.S. может у кого-нибудь есть и скрипт для добавления в AD пользователей из Excel. Буду очень благодарен.

Fighter 25-08-2006 20:22 476897

а поиск?
fix! Импорт/экспорт пользователей Active Directory
ЗЫ. только формат сего файла есть штука не совсем произвольная.. Впрочем, чем труднее задача - тем интереснее решение =)

mikechaik 25-08-2006 20:30 476900

За скрипт спасиба, а как на счет 4 столбца, как в Экселе это сделать чтобы имя пользователя формировалось из фамилии и первых букв имени и отчества

Fighter 25-08-2006 22:31 476941

вряд ли данный вопрос отностится к компетенции раздела Windows2003
и гораздо эффективнее, в плане его разрешения, было бы вопрошать в разлеле програмирования
ибо, ИМХО, без помощи VB эту дилему не разрешить
ЗЫ. поправьте если ошибаюсь

mikechaik 26-08-2006 09:45 477012

Вот написал скрипт на основе примеров. Сделал с подробными комментариями. Вроде правильно? Пока не стал проверять на серваке, вдург косяк какой то:)
Вопрос - как можно добавить пользователю не в одну группу, а сразу несколько?

Код:

'******************************************************************************************
Option Explicit 'директива - определение переменных в сценарии при помощи оператора Dim
Dim intRow 'определение переменной строки Excel
Dim objExcel, objWorkbook, objContainer, objOU, objUser 'определение указателей-переменных
Dim strContainer, strOU, strSheet 'определение переменных
Dim strSam, strCN, strFirst, strLast, strPWD, strGrp 'определение переменных атрибутов пользователя
'******************************************************************************************
strSheet = "C:\Users.xls" 'переменная, хранящая путь к файлу пользователей
'******************************************************************************************
Set objExcel = CreateObject("Excel.Application") 'создание объекта Excel
Set objWorkbook = objExcel.Workbooks.Open(strSheet) 'открытие файла пользователей
'******************************************************************************************
intRow = 3 'задание начальной строки Excel для считывания данных пользователя
Do Until objExcel.Cells(intRow,1).Value = "" 'начало цикла обработки строк Excel
        strSam = Trim(objExcel.Cells(intRow,1).Value) 'получение SAM пользователя
        strCN = Trim(objExcel.Cells(intRow,2).Value) 'получение общего имени пользователя
        strFirst = Trim(objExcel.Cells(intRow,3).Value) 'получение имени пользователя
        strLast = Trim(objExcel.Cells(intRow,4).Value) 'получение фамилии пользователя
        strOU = Trim(objExcel.Cells(intRow,5).Value) 'получение OU пользователя
        strPWD = Trim(objExcel.Cells(intRow,6).Value) 'получение пароля пользователя
        strGrp = Trim(objExcel.Cells(intRow,7).Value) 'получение группы пользователя
        '*********************************************************************************
        Set objContainer = GetObject("LDAP://ou=" & strOU & ",dc=school,dc=local")
        'привязка с объектом OU
        Set objUser = objContainer.Create("User", "cn=" & strCN) 'создание учетной записи CN
        objUser.sAMAccountName = strSam 'присвоение SAM пользователю
        objUser.givenName = strFirst 'присвоение имени пользователя
        objUser.sn = strLast 'присвоение фамилии пользователя
        objUser.UserAccountControl = 512 'параметр учетной записи Normal_Account
        objUser.pwdLastSet = 0 'не требовать смены пароля при следующем входе
        objUser.SetInfo 'записываем новый объект (пользователя) в каталог
        objUser.memberOf = ("CN=" & strGrp & ",OU=" & strOU & ",dc=school,dc=local")
        objUser.SetPassword strPWD 'установка пароля пользователю
        'objUser.SetInfo 'записываем новый объект (пользователя) в каталог
        '*********************************************************************************
        intRow = intRow + 1 'переход на следующую строку Excel
Loop 'конец цикла обработки строк Excel
'******************************************************************************************
objExcel.Quit 'закрытие Excel
WScript.Quit 'завершение выполнение скрипта

Скрипт берет данные из файла ексель. В нем 7 колонок: SAM-имя, общее имя (CN), имя, фамилия, подразделение (OU), пароль (PWD), группа (Grp). Организован цикл, пока первая ячейка текущей строки не станет равной пустому значению (Value = "").
В конце кажого цикла увеличиваем значение номера текущей строки (intRow = intRow +1). Оператор Trim() отсекает лишнии пробелы слева/справа в считанной ячейке.

P.S. и как всетаки в экселе сформировать SAM-имя на основе фамилии и инициалов?:

dww 26-08-2006 10:23 477015

используем текстовые функции Exell, примерно так :

=CONCATENATE(A1;LEFT(B1;1);LEFT(C1;1))

mikechaik 27-08-2006 19:12 477415

Вроде разобрался с формулами. Вопрос по ходу работы возник - скрипт будет считывать из ячейки формулу или ее значение? Если формулу, то как сделать чтобы брал значение. Можно наверно скопировать и вставить через специальную вставку - вставить значение. Но так потеряем функцию Не хотелось бы:)

У меня стиль сылок R1C1 (Параметры -> Общие), т.е. столбцы в екселе обзываются не буквами А, B... а цифрами. Есть формула =R3C1&" "&R3C2&" "&ПСТР(R3C3;1;1)&"." Пытаюсь ее как раньше потянуть вниз чтобы формула распросранилась на нижележащии ячейки, но копируется формула как есть. А мне надо, чтобы значения строк менялись в зависимости от номера строки, т.е. R.

Все разобрался. Оказывается стиль сылок R1C1 по умолчанию имеет абсолютный путь, относительный нужно использовать в квадратных скобках


Время: 00:47.

Время: 00:47.
© OSzone.net 2001-