Имя: Пароль:
IT
 
Программное создание пользователей 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
Может в понедельник кто ответит :)