Lister les utilisateurs d'un groupe

deathsurfer Messages postés 35 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 28 juillet 2009 - 29 juin 2007 à 11:20
deathsurfer Messages postés 35 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 28 juillet 2009 - 1 juil. 2007 à 17:02
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

izords Messages postés 20 Date d'inscription samedi 27 avril 2002 Statut Membre Dernière intervention 4 mars 2013
29 juin 2007 à 15:22
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);
 }
}
0
deathsurfer Messages postés 35 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 28 juillet 2009
30 juin 2007 à 12:03
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....
0
izords Messages postés 20 Date d'inscription samedi 27 avril 2002 Statut Membre Dernière intervention 4 mars 2013
30 juin 2007 à 15:33
Moi ca m'intéresse !!
0
deathsurfer Messages postés 35 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 28 juillet 2009
1 juil. 2007 à 17:02
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!
0
Rejoignez-nous