Определите, находится ли текущий пользователь в группе администраторов (Windows / Python) - PullRequest
4 голосов
/ 15 марта 2010

Я хочу, чтобы определенные функции в моем приложении были доступны, только если текущий пользователь является администратором.

Как определить, находится ли текущий пользователь в локальной группе администраторов с помощью Python в Windows?

Ответы [ 3 ]

6 голосов
/ 15 марта 2010

Вы можете попробовать это :

import ctypes
print ctypes.windll.shell32.IsUserAnAdmin()
1 голос
/ 29 апреля 2016
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'))

Конечно, в вашем случае «SOME_GROUP» будет «администраторами»

0 голосов
/ 07 мая 2018

Я хотел бы отдать должное Владу Бездену , потому что без его использования модуля win32net этот ответ здесь не существовал бы.

Если вы действительно хотите узнать, может ли пользователь выступать в роли администратора после UAC , вы можете сделать следующее. Он также перечисляет группы, в которых находится текущий пользователь, если это необходимо.
Он будет работать на большинстве (всех?) настройках языка .
Локальная группа просто должна начать с «Admin», что обычно и происходит ...
(Кто-нибудь знает, будут ли некоторые настройки другими?)

Чтобы использовать этот фрагмент кода, вам нужно установить модуль pywin32, если у вас его еще нет, вы можете получить его из PyPI: pip install pywin32

ВАЖНО ЗНАТЬ:
Для некоторых пользователей / программистов может быть важно, чтобы функция os.getlogin() была доступна только с python3.1 в операционных системах Windows ... Python3.1 Документация

win32net Reference

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.

Ох и ГДЕ from time import sleep и sleep(10):

ВСТАВИТЬ собственный импорт / код ...

...