Lister les utilisateurs d'un groupe

Signaler
Messages postés
35
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
28 juillet 2009
-
Messages postés
35
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
28 juillet 2009
-
Bonjour à tous! Voilà j'arrive à récuperer les différents groupes et
utilisateurs mais je n'arrive pas à récuperer les utilisateurs d'un
groupe.

J'aimerais que ca fasse du genre:

Groupe1

User1 du Groupe1

User2 du Groupe 1

Groupe2

User1 du Groupe2

User2 du Groupe2 etc...


Voici le code qui permet de les lister indépendamment:<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

 
Dim chemin, message, Item, Classe AsObject
Dim computer AsString = "NOM_PC"
message = "Liste des utilisateurs et des groupes sur " & computer & Chr(10) & Chr(10)
chemin= GetObject("WinNT://" & computer & ",computer")
MsgBox(message)
ForEach Item In chemin
'pour les utilisateurs
Classe = Item.Class
If Classe = "User"Then
message = message & Classe & Chr(9) & Item.name & Chr(10)
MsgBox(message)
EndIf
'pour les groupes
If Classe = "Group"Then
message = message & Classe & Chr(9) & Item.name & Chr(10)
MsgBox(message)
EndIf
Next

<!-- END TEMPLATE: bbcode_code -->

Merci a tous de votre aide!

4 réponses

Messages postés
20
Date d'inscription
samedi 27 avril 2002
Statut
Membre
Dernière intervention
4 mars 2013

Voici un code qui permet de faire ca mais je code en C#. Je suis certain que tu pourra trouvé l'équivalent en VB.

Classe

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;
namespace NetworkFunctions
{
 public class NetworkAPI
 {
  #region LOCAL_GROUP_INFO_1 (Structure)
  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  public struct LOCALGROUP_INFO_1
  {
   [MarshalAs(UnmanagedType.LPWStr)]
   public string lgrpi1_name;
   [MarshalAs(UnmanagedType.LPWStr)]
   public string lgrpi1_comment;
  }
  #endregion


  #region LOCALGROUP_MEMBER_INFO_1 (Structure)
  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  public struct LOCALGROUP_MEMBERS_INFO_1
  {
   public int lgrmi1_sid;
   public int lgrmi1_sidusage;
   public string lgrmi1_name;
  }
  #endregion


  #region NetLocalGroupAdd (API Call)
  [DllImport("Netapi32.dll")]
  public extern static int NetLocalGroupAdd([MarshalAs(UnmanagedType.LPWStr)] string servername, int level, ref LOCALGROUP_INFO_1 buf, int parm_err);
  #endregion


  #region NetLocalGroupDel(API Call)
  [DllImport("Netapi32.dll")]
  public extern static int NetLocalGroupDel([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string groupname);
  #endregion


  #region NetLocalGroupGetInfo (API Call)
  [DllImport("Netapi32.dll")]
  public extern static int NetLocalGroupGetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string groupname, int level, out IntPtr bufptr);
  #endregion


  [DllImport("Netapi32.dll")]
  public extern static int NetLocalGroupSetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string groupname, int level, ref LOCALGROUP_INFO_1 buf, int parm_err);


  [DllImport("Netapi32.dll")]
  public extern static int NetLocalGroupEnum([MarshalAs(UnmanagedType.LPWStr)]
                    string servername, int level, out System.IntPtr bufptr, int prefmaxlen, out
                    int entriesread, out int totalentries, out int resumehandle);


  [DllImport("Netapi32.dll")]
  public extern static int NetApiBufferFree(IntPtr Buffer);


  [DllImport("Netapi32.dll")]
  public extern static int NetLocalGroupGetMembers([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string localgroupname, int level, out IntPtr bufptr, int prefmaxlen, out int entriesread, out int totalentries, out int resumehandle);


  public NetworkAPI()
  { }
 }
}

Puis les 2 fonctions qui permette d'utiliser cette classe et de lister les groupes ainsi que leurs membres
Mettre les 2 using suivant :

using System.Runtime.InteropServices;

using NetworkFunctions;

private void getGroup()
{
 int EntriesRead;
 int TotalEntries;
 int Resume;
 System.IntPtr bufPtr;


 NetworkAPI.NetLocalGroupEnum(null, 1, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume);


 if (EntriesRead > 0)
 {
  NetworkAPI.LOCALGROUP_INFO_1[] Groups = new NetworkAPI.LOCALGROUP_INFO_1[EntriesRead];
  IntPtr iter = bufPtr;
  for (int i = 0; i < EntriesRead; i++)
  {
   Groups[i] = (NetworkAPI.LOCALGROUP_INFO_1)Marshal.PtrToStructure
            (iter, typeof(NetworkAPI.LOCALGROUP_INFO_1));
   iter = (System.IntPtr)((int)iter + Marshal.SizeOf(typeof(NetworkAPI.LOCALGROUP_INFO_1)));
   Response.Write(Groups[i].lgrpi1_name + "&nbsp;&nbsp;&nbsp;(" + Groups[i].lgrpi1_comment + ")" + "
");
   getMembers(Groups[i].lgrpi1_name);
  }
  NetworkAPI.NetApiBufferFree(bufPtr);
 }
}


private void getMembers(string group)
{
 int EntriesRead;
 int TotalEntries;
 int Resume;
 System.IntPtr bufPtr;


 NetworkAPI.NetLocalGroupGetMembers(null, group, 1, out bufPtr, -1,
    out EntriesRead, out TotalEntries, out Resume);


 if (EntriesRead > 0)
 {
  NetworkAPI.LOCALGROUP_MEMBERS_INFO_1[]
     Members = new NetworkAPI.LOCALGROUP_MEMBERS_INFO_1[EntriesRead];
  System.IntPtr iter = bufPtr;
  for (int i = 0; i < EntriesRead; i++)
  {
   Members[i] = (NetworkAPI.LOCALGROUP_MEMBERS_INFO_1)Marshal.PtrToStructure
              (iter, typeof(NetworkAPI.LOCALGROUP_MEMBERS_INFO_1));
   iter = (System.IntPtr)((int)iter + Marshal.SizeOf(typeof(NetworkAPI.LOCALGROUP_MEMBERS_INFO_1)));
   Response.Write("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + Members[i].lgrmi1_name + "
");
  }
  NetworkAPI.NetApiBufferFree(bufPtr);
 }
}
Messages postés
35
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
28 juillet 2009

Lol merci izords il n' ya que toi qui me réponde!
J'ai trouvé la solution et il n'y a presque pas de lignes de codes, si ca interesse quelqu'un....
Messages postés
20
Date d'inscription
samedi 27 avril 2002
Statut
Membre
Dernière intervention
4 mars 2013

Moi ca m'intéresse !!
Messages postés
35
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
28 juillet 2009

Dim SAM, message, Item, Classe As Object
        Dim objGroup, objUser As Object
        Dim computer As String = "NOM_PC"
        message = "Liste des utilisateurs et des groupes sur " & computer & Chr(10) & Chr(10)
        SAM = GetObject("WinNT://" & computer & ",computer")
        MsgBox(message)
        For Each Item In SAM
            Classe = Item.Class
            If Classe = "Group" Then
                message = message & Classe & Chr(9) & Item.name & Chr(10)
                MsgBox("Groupe:" & Item.name)
                objGroup = GetObject("WinNT://" & computer & "/" & Item.name)
                For Each objUser In objGroup.Members
                    MsgBox("utilisateurs: " & objUser.Name)
                Next
            End If
        Next
Tiens izords!