Déterminer si l'utilisateur est en cours dans le groupe Administrateurs (Windows / Python)

StackOverflow https://stackoverflow.com/questions/2448418

  •  20-09-2019
  •  | 
  •  

Question

Je veux certaines fonctions dans ma demande d'être accessible uniquement si l'utilisateur actuel est un administrateur.

Comment puis-je déterminer si l'utilisateur actuel est dans le groupe Administrateurs local en utilisant Python sous Windows?

Était-ce utile?

La solution

Vous pouvez essayer cette :

import ctypes
print ctypes.windll.shell32.IsUserAnAdmin()

Autres conseils

import win32net


def if_user_in_group(group, member):
    members = win32net.NetLocalGroupGetMembers(None, group, 1)
    return member.lower() in list(map(lambda d: d['name'].lower(), members[0]))  


# Function usage
print(if_user_in_group('SOME_GROUP', 'SOME_USER'))

Bien sûr, dans votre cas « SOME_GROUP » sera « administrateurs »

Je voudrais donner un certain crédit Vlad Bezden , becuase sans son utilisation du module win32net ce répondre ici n'existerait pas.

Si vous voulez vraiment savoir si l'utilisateur a la capacité d'agir comme administrateur passé UAC vous pouvez faire ce qui suit. Il énumère également les groupes auxquels l'utilisateur actuel est en, si nécessaire.
Il fonctionne sur plus (tous?) langue set-up .
Le groupe local juste as à commencer par « Admin », qu'il fait habituellement ...
(Est-ce que quelqu'un sait si certains set-ups seront différentes?)

Pour utiliser ce code extrait vous aurez besoin d'avoir installé le module de pywin32, si vous ne l'avez pas encore, vous pouvez l'obtenir à partir PyPI: pip install pywin32

IMPORTANT A SAVOIR:
Il est peut-être important pour certains utilisateurs / codeurs que la fonction os.getlogin() est uniquement disponible depuis python3.1 sur les systèmes d'exploitation Windows ... python3.1 Documentation

win32net Référence

from time import sleep
import os
import win32net

if 'logonserver' in os.environ:
    server = os.environ['logonserver'][2:]
else:
    server = None

def if_user_is_admin(Server):
    groups = win32net.NetUserGetLocalGroups(Server, os.getlogin())
    isadmin = False
    for group in groups:
        if group.lower().startswith('admin'):
            isadmin = True
    return isadmin, groups


# Function usage
is_admin, groups = if_user_is_admin(server)

# Result handeling
if is_admin == True:
    print('You are a admin user!')
else:
    print('You are not an admin user.')
print('You are in the following groups:')
for group in groups:
    print(group)

sleep(10)

# (C) 2018 DelphiGeekGuy@Stack Overflow
# Don't hesitate to credit the author if you plan to use this snippet for production.

Oh, et OÙ from time import sleep et sleep(10):

INSERT propres importations / code ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top