Получение списка пользователей

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
FAER
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 22.04.2006 (Сб) 22:56
Откуда: Россия

Получение списка пользователей

Сообщение FAER » 16.10.2008 (Чт) 18:29

С использованием Active Directory. Какие есть способы?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Получение списка пользователей

Сообщение Sebas » 16.10.2008 (Чт) 18:57

LDAP или WMI
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

FAER
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 22.04.2006 (Сб) 22:56
Откуда: Россия

Re: Получение списка пользователей

Сообщение FAER » 16.10.2008 (Чт) 19:03

А какие для этого необходимо использовать компоненты? И ещё вопрос - возможно ли в VB6 реализовать многопоточность?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Получение списка пользователей

Сообщение Хакер » 16.10.2008 (Чт) 19:07

FAER писал(а):И ещё вопрос - возможно ли в VB6 реализовать многопоточность?

viewtopic.php?f=44&t=25514
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Получение списка пользователей

Сообщение Sebas » 16.10.2008 (Чт) 19:14

FAER писал(а):А какие для этого необходимо использовать компоненты?


Никакие. Используется GetObject

ЗЫ: Про WMI наврал. Оно(!) ток для локальных пользователей. Тоесть, прокатит только на контроллере домена.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

FAER
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 22.04.2006 (Сб) 22:56
Откуда: Россия

Re: Получение списка пользователей

Сообщение FAER » 16.10.2008 (Чт) 20:47

В общем, выручайте, парни) Нужно получить список всех машин, зарегенных в домене, и определить, кто из них в сети, а кто нет, а также получить список групп в домене. С помощью метода GetObject пробовал, но ничего путного из этого не получилось:
Код: Выделить всё
Private Function GetObjList(DomainName As String, obj As IAdsObj) As Variant
    Dim MylistName() As String
    Dim MyIADs As ActiveDs.IADs
    Dim MyContainer As ActiveDs.IADsContainer
    Dim MyObj As Object
        Set MyContainer = GetObject("WinNT://" + DomainName)
    Select Case obj
        Case 1
        MyContainer.Filter = Array("User")
        Case 2
        MyContainer.Filter = Array("Computer")
        Case 3
        MyContainer.Filter = Array("Group")
    End Select
      ReDim MylistName(0)
    For Each MyIADs In MyContainer
      Set MyObj = MyIADs
      ReDim Preserve MylistName(UBound(MylistName) + 1)
      MylistName(UBound(MylistName)) = MyObj.Name
    Next MyIADs
    GetObjList = MylistName
    Set MyObj = Nothing
    Set MyContainer = Nothing
End Function
Private Sub Command1_Click()
    Dim MyUsers As Variant
    MyUsers = GetObjList("MyDomen", User)
    MsgBox UBound(MyUsers)
End Sub


После нажития на кнопку появляется окошко с цифрой 184 (машин в сети много у нас в конторе). Для проверки я встал, и включил ещё 1 машину, но цифра не изменилась. Кроме того, как видно из кода, помимо числа компов в сети, прога должна показывать ещё и количество групп. Но этого не происходит. В чём трабл?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Re: Получение списка пользователей

Сообщение Konst_One » 17.10.2008 (Пт) 13:35

ADO:
Код: Выделить всё
ConnectionString="Provider=ADsDSOObject;Encrypt Password=False;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648"

120     Set cn = New ADODB.Connection
130     cn.ConnectionString = ConnectionString
          cn.CursorLocation = adUseClient
140     cn.Open
       
        Set Rs = New ADODB.Recordset
        Rs.CursorLocation = adUseClient
        Set Rs.ActiveConnection = cn

        Rs.Open SQL, , adOpenStatic, adLockReadOnly, adCmdText
   
160     Set Me.DataGrid1.DataSource = Rs



SQL:
1. computers:
Код: Выделить всё
select name FROM 'LDAP://DC=mydomain,DC=msk' WHERE objectClass = 'computer'

2. groups:
Код: Выделить всё
select * FROM 'LDAP://DC=mydomain,DC=msk' WHERE objectClass = 'group'

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Получение списка пользователей

Сообщение alibek » 17.10.2008 (Пт) 13:54

FAER писал(а):Кроме того, как видно из кода, помимо числа компов в сети, прога должна показывать ещё и количество групп.

Обманываешь ты. В коде этого нет.
Lasciate ogni speranza, voi ch'entrate.

MayAA_Seversk
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 09.12.2009 (Ср) 10:14

Re: Получение списка пользователей

Сообщение MayAA_Seversk » 09.12.2009 (Ср) 10:41

Мне сегодня понадобилось самому получить список пользователей домена для рассылки сообщений. Вот почитал тут у вас и накропал свой вариант. Можно сделать классом, но я просто не заморачивался пока. Может пригодится кому

Option Explicit
Dim vUsers_Coll ' массив объектов user в домене
Dim vGroups_Coll ' массив объектов group в домене

Function Users(aDomen As String) As Long
' возвращает количество пользователей в домене
vUsers_Coll = Get_Coll(aDomen, "user")
Users = UBound(vUsers_Coll)
End Function

Function Groups(aDomen As String) As Long
' возвращает количество групп в домене
vGroups_Coll = Get_Coll(aDomen, "group")
Groups = UBound(vGroups_Coll)
End Function

Function Get_Coll(aDomen As String, aWhat As String) As Variant
' получение массива объектов
Dim vObjects
Dim vObject
ReDim vObject_Coll(0)
Set vObjects = GetObject("WinNT://" & aDomen)
vObjects.Filter = Array(aWhat)
For Each vObject In vObjects
ReDim Preserve vObject_Coll(UBound(vObject_Coll) + 1)
vObject_Coll(UBound(vObject_Coll)) = vObject.Name
Next
Set vObject = Nothing
Set vObjects = Nothing
Get_Coll = vObject_Coll
End Function

Dim i As Long
Dim Count As Long
Count = Users("mydomen")
For i = 1 To Count
MsgBox vUsers_Coll(i)
Next i


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 65

    TopList  
cron