def NetGroupGetUsers(self, server, name, level): keepgoing = 1 resume = 0 members = [] while keepgoing: try: m, total, resume = win32net.NetGroupGetUsers( server, name, level, resume, win32netcon.MAX_PREFERRED_LENGTH) except: return [] for member in m: members.append(member) if not resume: keepgoing = 0 return members
def GroupEnum(): "Enumerates all the domain groups" nmembers = 0 resume = 0 while 1: data, total, resume = win32net.NetGroupEnum(GlobalServer, 1, resume) # print "Call to NetGroupEnum obtained %d entries of %d total" % (len(data), total) for group in data: verbose("Found group %(name)s:%(comment)s " % group) memberresume = 0 while 1: memberdata, total, memberresume = win32net.NetGroupGetUsers( GlobalServer, group['name'], 0, resume) for member in memberdata: verbose(" Member %(name)s" % member) nmembers = nmembers + 1 if memberresume == 0: break if not resume: break
def GroupEnum(): "Enumerates all the domain groups" nmembers = 0 resume = 0 while 1: data, total, resume = win32net.NetGroupEnum(server, 1, resume) # print "Call to NetGroupEnum obtained %d entries of %d total" % (len(data), total) for group in data: verbose("Found group %(name)s:%(comment)s " % group) memberresume = 0 while 1: memberdata, total, memberresume = win32net.NetGroupGetUsers( server, group["name"], 0, resume) for member in memberdata: verbose(" Member %(name)s" % member) nmembers = nmembers + 1 if memberresume == 0: break if not resume: break assert nmembers, "Couldnt find a single member in a single group!" print("Enumerated all the groups")
def __get_groups_V0__(self): """ Version précédente. Je la garde pour conjurer le mauvais sort Renvoie un dictionnaire des groupes du serveur avec, pour chacun, la liste de ses membres et le descriptif. N.B. On met tous les noms en minuscules pour ne pas être emmerdé quand on voudra faire "if nom in liste" """ groups_list = {} resume = 0 Enr, Total, resume = win32net.NetGroupEnum(self.server, 2, resume, 4096) while 1: for Champ in Enr: group_name = Champ['name'].lower() group_comment = Champ['comment'] members_list = [] memberresume = 0 memberdata, total, memberresume = win32net.NetGroupGetUsers( self.server, group_name, 1, memberresume) while 1: for member in memberdata: members_list.append(member['name'].lower()) if memberresume <= 0: break memberdata, total, memberresume = win32net.NetGroupGetUsers( self.server, group_name, 1, memberresume) members_list.sort() groups_list[group_name] = [members_list, group_comment] if resume <= 0: break Enr, Total, resume = win32net.NetGroupEnum(self.server, 2, resume, 4096) """ Cet abruti de microsoft s'obstine à utiliser des alias pour certains noms ("c:/Utilisateurs" par exemple qui est en réalité c:/Users"...). C'est ainsi que le groupe "domain users" est parfois traduit par "utilisateurs". Pour pas être emmerdés on ajoute artificiellement ces noms à la con. (fruit de l'expérience ! Et c'est certainement pas fini. À adapter aussi en fonction de la langue) """ try: groups_list['administrateurs'] = groups_list['domain admins'] except: pass try: groups_list['administrators'] = groups_list['domain admins'] except: pass try: groups_list['utilisateurs'] = groups_list['domain users'] except: pass try: groups_list['users'] = groups_list['domain users'] except: pass return groups_list
def __init__(self): self.domain = '.' # current domain self.logontype = win32con.LOGON32_LOGON_INTERACTIVE self.provider = win32con.LOGON32_PROVIDER_WINNT50 IP = '127.0.0.1' self.users = win32net.NetGroupGetUsers(IP,'none',0)[0]
import sys import getopt import socket import csv import time #Import the OptionParser to allow for CLI options from optparse import OptionParser # HPSA - Depending on Windows/Unix select the directories containing the pytwist libraries. if (sys.platform == 'win32'): import win32net pytwist_dir = (os.environ['SystemDrive'] + '\\Program Files\\Opsware\\smopylibs2') pylibs_dir = (os.environ['SystemDrive'] + '\\Program Files\\Opsware\\agent\\pylibs') else: pytwist_dir = '/opt/opsware/pylibs2' pylibs_dir = '/opt/opsware/agent/pylibs2' # Add the pytwist/pylibs directories to the path and import necessary modules. sys.path.append(pylibs_dir) sys.path.append(pytwist_dir) # Main Script if (__name__ == '__main__'): hostname = socket.gethostname() (users, length, resume_handle) = win32net.NetGroupGetUsers(None, 'none', 1) for user in users: print "%s,%s" % (hostname, user['name'])