Показать полную графическую версию : Создание пользователей скриптом из Excel
mikechaik
25-08-2006, 19:09
Собираюсь создать очень много пользователей через Excel. Предварительно забив их туда (в ексель). Забивать буду:
- Фамилия (1 столбец);
- Имя (2 столбец);
- Отчество (3 столбец);
- Имя входа в домен - тобишь пользователь (4 столбец);
- Пароль (5 столбец);
- OU (6 столбец);
Как в екселе сделать, чтобы 4 столбец формировался автоматом, т.е. если 1,2,3: Сидоров Антон Борисович, то 4 будет состоять из полной фамилии + инициалы - СидоровАБ
P.S. может у кого-нибудь есть и скрипт для добавления в AD пользователей из Excel. Буду очень благодарен.
а поиск?
fix! Импорт/экспорт пользователей Active Directory (http://forum.oszone.net/thread-60458.html)
ЗЫ. только формат сего файла есть штука не совсем произвольная.. Впрочем, чем труднее задача - тем интереснее решение =)
mikechaik
25-08-2006, 20:30
За скрипт спасиба, а как на счет 4 столбца, как в Экселе это сделать чтобы имя пользователя формировалось из фамилии и первых букв имени и отчества
вряд ли данный вопрос отностится к компетенции раздела Windows2003
и гораздо эффективнее, в плане его разрешения, было бы вопрошать в разлеле програмирования
ибо, ИМХО, без помощи VB эту дилему не разрешить
ЗЫ. поправьте если ошибаюсь
mikechaik
26-08-2006, 09:45
Вот написал скрипт на основе примеров. Сделал с подробными комментариями. Вроде правильно? Пока не стал проверять на серваке, вдург косяк какой то:)
Вопрос - как можно добавить пользователю не в одну группу, а сразу несколько?
'******************************************************************************************
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-имя на основе фамилии и инициалов?:
используем текстовые функции Exell, примерно так :
=CONCATENATE(A1;LEFT(B1;1);LEFT(C1;1))
mikechaik
27-08-2006, 19:12
Вроде разобрался с формулами. Вопрос по ходу работы возник - скрипт будет считывать из ячейки формулу или ее значение? Если формулу, то как сделать чтобы брал значение. Можно наверно скопировать и вставить через специальную вставку - вставить значение. Но так потеряем функцию Не хотелось бы:)
У меня стиль сылок R1C1 (Параметры -> Общие), т.е. столбцы в екселе обзываются не буквами А, B... а цифрами. Есть формула =R3C1&" "&R3C2&" "&ПСТР(R3C3;1;1)&"." Пытаюсь ее как раньше потянуть вниз чтобы формула распросранилась на нижележащии ячейки, но копируется формула как есть. А мне надо, чтобы значения строк менялись в зависимости от номера строки, т.е. R.
Все разобрался. Оказывается стиль сылок R1C1 по умолчанию имеет абсолютный путь, относительный нужно использовать в квадратных скобках
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.