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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <Foxpasspam@tiscalipaspub.fr> a écrit dans le message de
news:36pfjkF55smhbU1@individual.net...
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.
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
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
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
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