OVH Cloud OVH Cloud

Tous les UserNamer d'un domaine NT

2 réponses
Avatar
FoxTrot
Bonjoir,

Quelqu'un connait-il un procédure pour énumérer les UserName d'un domaine
NT.
C'est pour une application BDR et pour créer des droits automatiquement sur
certaines fonctions du logiciel en fonction de l'username.

Merci d'avance.

--
FoxTrot

2 réponses

Avatar
Guy DETIENNE
Salut ;O)

On peut faire cela avec ADSI. Il faut dans un premier temps référencer la
librairie Active DS Type Library.

La fonction GetUsers (du code ci-dessous) retourne une collection avec tous
les utilisateurs d'un domaine défini.
Utilisation :

Dim UsersCollection as New Collection

Set UsersCollection = GetUsers

Msgbox "Il y a " & UsersCollection.Count & " utilisateur(s) dans le domaine"
Msgbox "Le premier user dans la liste est " & UsersCollection.Item(1)

En fonction du nombre de users et de l'encombrement du Master Browser du
domaine, la rapatriement peut durer quelques longues secondes...

J'espère que cela t'aidera.

Guy


'A COLLER DANS UN MODULE

Option Explicit
Private DSO As IADsOpenDSObject
Private CONTAINER As IADsContainer
Private User As IADsUser
Private Const UserName As String = "AdminAccount"
Private Const DomainName As String = "MyDomain"
Private Const Password As String = "AdminPassword"

Public Function GetUsers() As Collection

On Error Resume Next

Dim MyCollection As New Collection

Set DSO = GetObject("WinNT:")
Set CONTAINER = DSO.OpenDSObject("WinNT://" & DomainName, UserName,
Password, 1)

CONTAINER.Filter = Array("User")

For Each User In CONTAINER
MyCollection.add User.name
Next

'Pour trier la collection
Set MyCollection = SortCollection(MyCollection)

Set GetUsers = MyCollection
Set MyCollection = Nothing
Set CONTAINER = Nothing
Set DSO = Nothing

End Function

'Code de tri pour Collections

Public Function SortCollection(ByVal C As Collection) As Collection

Dim n As Long: n = C.Count

If n = 0 Then Set SortCollection = New Collection: Exit Function

ReDim index(0 To n - 1) As Long ' allocate index array

Dim i As Long, m As Long

For i = 0 To n - 1: index(i) = i + 1: Next ' fill index array
For i = n 2 - 1 To 0 Step -1 ' generate ordered
heap
Heapify C, index, i, n
Next
For m = n To 2 Step -1 ' sort the index array
Exchange index, 0, m - 1 ' move highest element
to top
Heapify C, index, 0, m - 1
Next
Dim c2 As New Collection
For i = 0 To n - 1: c2.add C.Item(index(i)): Next ' fill output
collection
Set SortCollection = c2
End Function

Private Sub Heapify(ByVal C As Collection, index() As Long, ByVal i1 As
Long, ByVal n As Long)
' Heap order rule: a[i] >= a[2*i+1] and a[i] >= a[2*i+2]
Dim nDiv2 As Long: nDiv2 = n 2
Dim i As Long: i = i1
Do While i < nDiv2
Dim K As Long: K = 2 * i + 1
If K + 1 < n Then
If C.Item(index(K)) < C.Item(index(K + 1)) Then K = K + 1
End If
If C.Item(index(i)) >= C.Item(index(K)) Then Exit Do
Exchange index, i, K
i = K
Loop
End Sub

Private Sub Exchange(index() As Long, ByVal i As Long, ByVal j As Long)
Dim Temp As Long: Temp = index(i)
index(i) = index(j)
index(j) = Temp
End Sub


"FoxTrot" a écrit dans le message de
news:
Bonjoir,

Quelqu'un connait-il un procédure pour énumérer les UserName d'un domaine
NT.
C'est pour une application BDR et pour créer des droits automatiquement


sur
certaines fonctions du logiciel en fonction de l'username.

Merci d'avance.

--
FoxTrot




Avatar
FoxTrot
Bonjour/soir à tous, Guy DETIENNE a dit :


Salut ;O)

On peut faire cela avec ADSI. Il faut dans un premier temps
référencer la librairie Active DS Type Library.

La fonction GetUsers (du code ci-dessous) retourne une collection
avec tous les utilisateurs d'un domaine défini.
Utilisation :

Dim UsersCollection as New Collection

Set UsersCollection = GetUsers

Msgbox "Il y a " & UsersCollection.Count & " utilisateur(s) dans le
domaine" Msgbox "Le premier user dans la liste est " &
UsersCollection.Item(1)

En fonction du nombre de users et de l'encombrement du Master Browser
du domaine, la rapatriement peut durer quelques longues secondes...

J'espère que cela t'aidera.

Guy


'A COLLER DANS UN MODULE

Option Explicit
Private DSO As IADsOpenDSObject
Private CONTAINER As IADsContainer
Private User As IADsUser
Private Const UserName As String = "AdminAccount"
Private Const DomainName As String = "MyDomain"
Private Const Password As String = "AdminPassword"

Public Function GetUsers() As Collection

On Error Resume Next

Dim MyCollection As New Collection

Set DSO = GetObject("WinNT:")
Set CONTAINER = DSO.OpenDSObject("WinNT://" & DomainName, UserName,
Password, 1)

CONTAINER.Filter = Array("User")

For Each User In CONTAINER
MyCollection.add User.name
Next

'Pour trier la collection
Set MyCollection = SortCollection(MyCollection)

Set GetUsers = MyCollection
Set MyCollection = Nothing
Set CONTAINER = Nothing
Set DSO = Nothing

End Function

'Code de tri pour Collections

Public Function SortCollection(ByVal C As Collection) As Collection

Dim n As Long: n = C.Count

If n = 0 Then Set SortCollection = New Collection: Exit Function

ReDim index(0 To n - 1) As Long ' allocate index
array

Dim i As Long, m As Long

For i = 0 To n - 1: index(i) = i + 1: Next ' fill index
array For i = n 2 - 1 To 0 Step -1 ' generate
ordered
heap
Heapify C, index, i, n
Next
For m = n To 2 Step -1 ' sort the index
array Exchange index, 0, m - 1 ' move
highest element
to top
Heapify C, index, 0, m - 1
Next
Dim c2 As New Collection
For i = 0 To n - 1: c2.add C.Item(index(i)): Next ' fill output
collection
Set SortCollection = c2
End Function

Private Sub Heapify(ByVal C As Collection, index() As Long, ByVal i1
As Long, ByVal n As Long)
' Heap order rule: a[i] >= a[2*i+1] and a[i] >= a[2*i+2]
Dim nDiv2 As Long: nDiv2 = n 2
Dim i As Long: i = i1
Do While i < nDiv2
Dim K As Long: K = 2 * i + 1
If K + 1 < n Then
If C.Item(index(K)) < C.Item(index(K + 1)) Then K = K + 1
End If
If C.Item(index(i)) >= C.Item(index(K)) Then Exit Do
Exchange index, i, K
i = K
Loop
End Sub

Private Sub Exchange(index() As Long, ByVal i As Long, ByVal j As
Long) Dim Temp As Long: Temp = index(i)
index(i) = index(j)
index(j) = Temp
End Sub





Merci

--
FoxTrot