0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 6
1

Добавление пользователей в AD из нескольких Excel-файлов

31.07.2014, 11:45. Показов 1549. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Недавно появилась потребность заливать в AD тонны юзеров. В итоге, имеется скрипт, который делает это путем извлечения информации из Excel-файла. Далее, собственно, сама проблема. Таких файлов около сотни, и редактировать скрипт, вставляя в него постоянно название следующего файла слишком уж долго и проблематично. Как можно организовать добавление всех файлов экселевских находящихся в определенной папке?

Вот сам скрипт...
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
Option Explicit
 
Dim objExcel, strExcelPath, objSheet
Dim strLast, strFirst, strDM, strPW, intRow, intCol
Dim strMN, strEM, strL, strSA
Dim strCO, strPC, strPDON
Dim strGroupDN, objUser, objGroup, objContainer
Dim strCN, strNTName, strContainerDN
Dim strT, strF, strWN, objFSO, objShell
Dim intRunError, strNetBIOSDomain, strDNSDomain
Dim objRootDSE, objTrans, strLogonScript, strUPN
Dim strPreviousDN, blnBound
 
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
 
strExcelPath = "C:\MyFolder\NewUsersNew\NewUsers.xlsx"
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Wscript.Shell")
 
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("DefaultNamingContext")
 
Set objTrans = CreateObject("NameTranslate")
objTrans.Init ADS_NAME_INITTYPE_GC, ""
objTrans.Set ADS_NAME_TYPE_1779, strDNSDomain
strNetBIOSDomain = objTrans.Get(ADS_NAME_TYPE_NT4)
 
strNetBIOSdomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
 
 
Set objExcel = CreateObject("Excel.Application")
 
On Error Resume Next
objExcel.Workbooks.Open strExcelPath
If (Err.Number <> 0) Then
    On Error GoTo 0
    Wscript.Echo "Unable to open spreadsheet " & strExcelPath
    Wscript.Quit
End If
On Error GoTo 0
Set objSheet = objExcel.ActiveWorkbook.Worksheets(1)
 
intRow = 2
 
strPreviousDN =""
Do While objSheet.Cells(intRow, 6).Value <> ""
    strContainerDN = Trim(objSheet.Cells(intRow, 1).Value)
    strFirst = Trim(objSheet.Cells(intRow, 2).Value)
    strDM = Trim(objSheet.Cells(intRow, 3).Value)
    strLast = Trim(objSheet.Cells(intRow, 4).Value)
    strPW = Trim(objSheet.Cells(intRow, 5).Value)
    strCN = Trim(objSheet.Cells(intRow, 6).Value)
    strNTName = Trim(objSheet.Cells(intRow, 7).Value)
    strUPN = Trim(objSheet.Cells(intRow, 8).Value)
    strT = Trim(objSheet.Cells(intRow, 9).Value)
    strF = Trim(objSheet.Cells(intRow, 10).Value)
    strMN = Trim(objSheet.Cells(intRow, 11).Value)
    strEM = Trim(objSheet.Cells(intRow, 12).Value)
    strPDON = Trim(objSheet.Cells(intRow, 13).Value)
 
Set objContainer = GetObject("LDAP://" & strContainerDN)
Set objUser = objContainer.Create("user", "cn=" & strCN)
objUser.sAMAccountName = strNTName
objUser.userPrincipalName = strUPN
On Error Resume Next
objUser.SetInfo
objUser.SetPassword "Rkbtyn2011"
objUser.AccountDisabled = False
objUser.SetInfo
If (strFirst <> "") Then
objUser.givenName = strFirst
End If
If (strLast <> "") Then
objUser.sn = strLast
End If
If (strDM <> "") Then
objUser.DisplayName = strDM
End If
If (strT <> "") Then
objUser.Title = strT
End If
If (strF <> "") Then
objUser.Company = strF
End If
If (strMN <> "") Then
objUser.Mobile = strMN
End If
If (strEM <> "") Then
objUser.mail = strEM
End If
If (strPDON <> "") Then
objUser.physicalDeliveryOfficeName = strPDON
End If
On Error Resume Next
objUser.userAccountControl = 66048
objUser.SetInfo
intRow = intRow + 1
objSheet = objSheet+1
Loop
 
 
 
objExcel.ActiveWorkbook.Close
 
 
 
objExcel.Application.Quit
Set objUser = Nothing
Set objGroup = Nothing
Set objContainer = Nothing
Set objSheet = Nothing
Set objExcel = Nothing
Set objFSO = Nothing
Set objShell = Nothing
Set objTrans = Nothing
Set objRootDSE = Nothing
 
Wscript.Echo "Done"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2014, 11:45
Ответы с готовыми решениями:

Макросы на копирование данных из нескольких файлов excel в один файл excel
Здравствуйте! Помогите сделать два макроса в excel, которые будут копировать данные из множества...

Сервер для доступа нескольких пользователей в книгу Excel
Доброго времени суток Пишу Вам в надежде получить совет по этой теме. Условие: Есть офис, парк...

Экспорт нескольких Excel файлов в один Excel файл
Здравствуйте! Помогите пожалуйста с реализацией макроса (осилил только загрузку с одного...

Excel подобная таблица для одновременной работы нескольких пользователей
Добрый вечер. Собственно, сабж. Помогите найти пожалуйста, если такая программа/возможность...

9
2618 / 548 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
31.07.2014, 13:46 2
Цитата Сообщение от Aventer Посмотреть сообщение
... Как можно организовать добавление всех файлов экселевских находящихся в определенной папке?..
Пример:
Кликните здесь для просмотра всего текста
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
Option Explicit
 
Dim objExcel, strExcelPath, objSheet
Dim strLast, strFirst, strDM, strPW, intRow, intCol
Dim strMN, strEM, strL, strSA
Dim strCO, strPC, strPDON
Dim strGroupDN, objUser, objGroup, objContainer
Dim strCN, strNTName, strContainerDN
Dim strT, strF, strWN, objFSO, objShell
Dim intRunError, strNetBIOSDomain, strDNSDomain
Dim objRootDSE, objTrans, strLogonScript, strUPN
Dim strPreviousDN, blnBound
Dim objItem
 
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
 
strExcelPath = "C:\MyFolder\NewUsersNew"
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strExcelPath) Then
    Set objShell = CreateObject("Wscript.Shell")
     
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDNSDomain = objRootDSE.Get("DefaultNamingContext")
     
    Set objTrans = CreateObject("NameTranslate")
    objTrans.Init ADS_NAME_INITTYPE_GC, ""
    objTrans.Set ADS_NAME_TYPE_1779, strDNSDomain
    strNetBIOSDomain = objTrans.Get(ADS_NAME_TYPE_NT4)
     
    strNetBIOSdomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
     
    Set objExcel = CreateObject("Excel.Application")
 
    On Error Resume Next
    For Each objItem In objFSO.GetFolder(strExcelPath).Files
        If LCase(Right(objItem.Name, 5)) = ".xlsx" Then
            objExcel.Workbooks.Open objItem.Path
            If (Err.Number <> 0) Then
                On Error GoTo 0
                Wscript.Echo "Unable to open spreadsheet " & objItem.Name
                Wscript.Quit
            End If
            On Error GoTo 0
            Set objSheet = objExcel.ActiveWorkbook.Worksheets(1)
             
            intRow = 2
             
            strPreviousDN =""
            Do While objSheet.Cells(intRow, 6).Value <> ""
                strContainerDN = Trim(objSheet.Cells(intRow, 1).Value)
                strFirst = Trim(objSheet.Cells(intRow, 2).Value)
                strDM = Trim(objSheet.Cells(intRow, 3).Value)
                strLast = Trim(objSheet.Cells(intRow, 4).Value)
                strPW = Trim(objSheet.Cells(intRow, 5).Value)
                strCN = Trim(objSheet.Cells(intRow, 6).Value)
                strNTName = Trim(objSheet.Cells(intRow, 7).Value)
                strUPN = Trim(objSheet.Cells(intRow, 8).Value)
                strT = Trim(objSheet.Cells(intRow, 9).Value)
                strF = Trim(objSheet.Cells(intRow, 10).Value)
                strMN = Trim(objSheet.Cells(intRow, 11).Value)
                strEM = Trim(objSheet.Cells(intRow, 12).Value)
                strPDON = Trim(objSheet.Cells(intRow, 13).Value)
             
                Set objContainer = GetObject("LDAP://" & strContainerDN)
                Set objUser = objContainer.Create("user", "cn=" & strCN)
                objUser.sAMAccountName = strNTName
                objUser.userPrincipalName = strUPN
                On Error Resume Next
                objUser.SetInfo
                objUser.SetPassword "Rkbtyn2011"
                objUser.AccountDisabled = False
                objUser.SetInfo
                If (strFirst <> "") Then
                objUser.givenName = strFirst
                End If
                If (strLast <> "") Then
                objUser.sn = strLast
                End If
                If (strDM <> "") Then
                objUser.DisplayName = strDM
                End If
                If (strT <> "") Then
                objUser.Title = strT
                End If
                If (strF <> "") Then
                objUser.Company = strF
                End If
                If (strMN <> "") Then
                objUser.Mobile = strMN
                End If
                If (strEM <> "") Then
                objUser.mail = strEM
                End If
                If (strPDON <> "") Then
                objUser.physicalDeliveryOfficeName = strPDON
                End If
                On Error Resume Next
                objUser.userAccountControl = 66048
                objUser.SetInfo
                intRow = intRow + 1
                objSheet = objSheet+1
            Loop
            objExcel.ActiveWorkbook.Close
        End If
    Next
     
    objExcel.Application.Quit
    Set objUser = Nothing
    Set objGroup = Nothing
    Set objContainer = Nothing
    Set objSheet = Nothing
    Set objExcel = Nothing
    Set objFSO = Nothing
    Set objShell = Nothing
    Set objTrans = Nothing
    Set objRootDSE = Nothing
Else
    WScript.Echo "Не найден путь " & strExcelPath
End If
 
Wscript.Echo "Done"
0
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 6
31.07.2014, 15:10  [ТС] 3
Цитата Сообщение от Dmitrii Посмотреть сообщение
Пример:
Кликните здесь для просмотра всего текста

Название: Error.jpg
Просмотров: 103

Размер: 15.4 Кб
При запуске добавляет пользователей с первого файла, после чего выдает подобное сообщение. Если точнее, то при попытке обработки второго файла. Независимо от общего количества файлов в папке.
0
2618 / 548 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
31.07.2014, 16:43 4
Замените оператор
Visual Basic
1
Wscript.Echo "Unable to open spreadsheet " & objItem.Name
на такой:
Visual Basic
1
2
3
WScript.Echo "File: " & objItem.Name & vbNewLine & _
            "Err code: " & Err.Number & vbNewLine & _
            Err.Description
И покажите полученное сообщение об ошибке.
0
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 6
31.07.2014, 17:59  [ТС] 5
Цитата Сообщение от Dmitrii Посмотреть сообщение
И покажите полученное сообщение об ошибке.
Название: Error.jpg
Просмотров: 99

Размер: 11.2 Кб
0
2618 / 548 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
31.07.2014, 18:07 6
Aventer, закомментируйте оператор
Visual Basic
1
On Error GoTo 0
стоящий непосредственно перед оператором вывода сообщения об ошибке, и вновь покажите сообщение.
0
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 6
01.08.2014, 10:38  [ТС] 7
Цитата Сообщение от Dmitrii Посмотреть сообщение
и вновь покажите сообщение.
Добавление пользователей в AD из нескольких Excel-файлов
0
2618 / 548 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
01.08.2014, 12:05 8
Aventer, закомментируйте оставшиеся операторы, начинающиеся с выражения On Error, отредактируйте код сценария так, чтобы его можно было использовать как код макроса, разместите его в VBA-проекте и займитесь отладкой.
Я пока ничем помочь не могу, т.к. у меня нет "под руками" ни домена, ни офисного пакета от MS.
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
01.08.2014, 15:43 9
Aventer, на какой строке возникает ошибка?
Это будет указано в ошибке, если сделать то, что Dmitrii сказал.
0
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 6
01.08.2014, 18:11  [ТС] 10
Цитата Сообщение от Dmitrii Посмотреть сообщение
отредактируйте код сценария так, чтобы его можно было использовать как код макроса, разместите его в VBA-проекте и займитесь отладкой.
Учитывая мои познания в данном вопросе - вышесказанное прозвучало для меня на китайском
0
01.08.2014, 18:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2014, 18:11
Помогаю со студенческими работами здесь

Добавление нескольких файлов в БД
Мне надо вывести в бд сразу несколько файлов в форме. сказали что надо преобразовать массив в...

Добавление сразу нескольких файлов
Здравствуйте. В приложенной базе все файлы (word, excel, txt и др) добавляются по одному. Как...

Добавление нескольких файлов в OpenFileDialog
Надо сделать чтоб можно было выбрать несколько файлов в OpenDialog Пока вот что сделал, место...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru