![]() |
|
Программное создание пользователей Win2008r2 без AD | ☑ | ||
---|---|---|---|---|
0
Trance_1C
20.04.12
✎
09:07
|
Приветствую Комрады! у меня пятничный вопрос :)
На Win2008r2 без AD, гоняю скрипт написанный на VBA, для авто создания пользователей, скрипт довольно простой и откомпилирован как консольное приложение VBA в VS2010, при запуске обходит в цикле строки текстового файла "users.csv" где каждая строка соответствует новому юзеру и через разделитель указаны необходимые поля типа (Имя,Полное Имя,Пароль,Описание) кроме этого скрипт заполняет среду, и должен заполнять группы. Проблема в том что группы созданным пользователям заполняются через одного., что совершенно противоречит логике кода - обход в цикле строк при этом в каждой итерации цикла пользователь создается, а группы заполняются через одного... В чем причина я так и не понял. |
|||
1
Trance_1C
20.04.12
✎
09:10
|
Код
Module Module1 Sub Main() ' Open up the text file Dim oFSO, oTS, sOU, sGrp oFSO = CreateObject("Scripting.FileSystemObject") oTS = oFSO.OpenTextFile("D:\batch\users.csv") Const ADS_PROPERTY_APPEND = 3 ' create the necessary variables Dim sUserID, sGivenName, sDisplayname, sSurname, sDescription, strComputer, sPassword, colAccounts, objUser, objGroup, objGroup55, sPonge, objUser2 'skip the first line of the file Dim sLine, sData 'sLine = oTS.ReadLine sLine = oTS.ReadLine strComputer = "." colAccounts = GetObject("WinNT://" & strComputer & "") ' now go through the file one line at a Time Do Until oTS.AtEndOfStream On Error Resume Next 'read the line and split it on the commas sLine = oTS.ReadLine sData = Split(sLine, ",") ' get the user information from this row 'sPassword = sData(0) sGivenName = sData(0) sSurname = sData(1) sPassword = sData(2) sDescription = sData(3) objUser = colAccounts.Create("user", sGivenName) objUser.SetPassword(sPassword) objUser.id = sGivenName objUser.fullname = sSurname objUser.SetInfo() objUser = GetObject("WinNT://" & strComputer & "/" & sGivenName & ",user") objGroup = GetObject("WinNT://" & strComputer & "/Пользователи удаленного рабочего стола,group") objGroup.Add(objUser.ADsPath) objGroup55 = GetObject("WinNT://" & strComputer & "/Пользователи,group") objGroup55.Add(objUser.ADsPath) objUser.description = sDescription objUser.fullname = sSurname objUser.TerminalServicesInitialProgram = "D:\batch\union.cmd" objUser.ConnectClientDrivesAtLogon = 1 objUser.DefaultToMainPrinter = 1 objUser.SetInfo() Loop oTS.Close() End Sub Function SetGroups(ByVal sGivenName) Dim strComputer, colAccounts, objGroup, objGroup55, objUser2 strComputer = "." colAccounts = GetObject("WinNT://" & strComputer & "") objGroup = GetObject("WinNT://" & strComputer & "/Пользователи удаленного рабочего стола,group") objGroup55 = GetObject("WinNT://" & strComputer & "/Пользователи,group") objUser2 = GetObject("WinNT://" & strComputer & "/" & sGivenName.ToString & ",user") objGroup.Add(objUser2.ADsPath) objGroup55.Add(objUser2.ADsPath) Return 0 End Function End Module |
|||
2
Trance_1C
20.04.12
✎
09:34
|
вообще полезная утилитка, давайте доведем до рабочего состояния :)
|
|||
3
Trance_1C
20.04.12
✎
10:32
|
апачки
|
|||
4
Trance_1C
20.04.12
✎
10:36
|
[Code]
Module Module1 Sub Main() ' Open up the text file Dim oFSO, oTS, sOU, sGrp oFSO = CreateObject("Scripting.FileSystemObject") oTS = oFSO.OpenTextFile("D:\batch\users.csv") Const ADS_PROPERTY_APPEND = 3 ' create the necessary variables Dim sUserID, sGivenName, sDisplayname, sSurname, sDescription, strComputer, sPassword, colAccounts, objUser, objGroup, objGroup55, sPonge, objUser2 'skip the first line of the file Dim sLine, sData 'sLine = oTS.ReadLine sLine = oTS.ReadLine strComputer = "." colAccounts = GetObject("WinNT://" & strComputer & "") ' now go through the file one line at a Time Do Until oTS.AtEndOfStream On Error Resume Next 'read the line and split it on the commas sLine = oTS.ReadLine sData = Split(sLine, ",") ' get the user information from this row 'sPassword = sData(0) sGivenName = sData(0) sSurname = sData(1) sPassword = sData(2) sDescription = sData(3) objUser = colAccounts.Create("user", sGivenName) objUser.SetPassword(sPassword) objUser.id = sGivenName objUser.fullname = sSurname objUser.SetInfo() objUser = GetObject("WinNT://" & strComputer & "/" & sGivenName & ",user") objGroup = GetObject("WinNT://" & strComputer & "/Пользователи удаленного рабочего стола,group") objGroup.Add(objUser.ADsPath) objGroup55 = GetObject("WinNT://" & strComputer & "/Пользователи,group") objGroup55.Add(objUser.ADsPath) objUser.description = sDescription objUser.fullname = sSurname objUser.TerminalServicesInitialProgram = "D:\batch\union.cmd" objUser.ConnectClientDrivesAtLogon = 1 objUser.DefaultToMainPrinter = 1 objUser.SetInfo() Loop oTS.Close() End Sub Function SetGroups(ByVal sGivenName) Dim strComputer, colAccounts, objGroup, objGroup55, objUser2 strComputer = "." colAccounts = GetObject("WinNT://" & strComputer & "") objGroup = GetObject("WinNT://" & strComputer & "/Пользователи удаленного рабочего стола,group") objGroup55 = GetObject("WinNT://" & strComputer & "/Пользователи,group") objUser2 = GetObject("WinNT://" & strComputer & "/" & sGivenName.ToString & ",user") objGroup.Add(objUser2.ADsPath) objGroup55.Add(objUser2.ADsPath) Return 0 End Function End Module [\Code] |
|||
5
Trance_1C
23.04.12
✎
03:42
|
Может в понедельник кто ответит :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |