【发布时间】:2011-01-27 18:02:20
【问题描述】:
我希望我的应用程序中的某些功能只有在当前用户是管理员时才能访问。
如何在 Windows 上使用 Python 确定当前用户是否在本地管理员组中?
【问题讨论】:
标签: python windows administrator
我希望我的应用程序中的某些功能只有在当前用户是管理员时才能访问。
如何在 Windows 上使用 Python 确定当前用户是否在本地管理员组中?
【问题讨论】:
标签: python windows administrator
你可以试试this:
import ctypes
print ctypes.windll.shell32.IsUserAnAdmin()
【讨论】:
IsUserAnAdmin() 仅适用于 Windows XP。它不能在更高版本的 Windows 上正常工作。
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”将是“管理员”
【讨论】:
我想感谢Vlad Bezden,因为如果没有他使用 win32net 模块,这里的答案将不存在。
如果您真的想知道用户是否有能力作为管理员过去的 UAC,您可以执行以下操作。如果需要,它还会列出当前用户所在的组。
它适用于大多数(全部?)语言设置。
本地组只需以“Admin”开头,它通常会这样做...
(有谁知道某些设置是否会有所不同?)
要使用此代码 sn-p 您需要安装 pywin32 模块,
如果你还没有它,你可以从 PyPI 获取它:pip install pywin32
重要提示:
对于某些用户/编码人员来说,函数os.getlogin() 仅在 Windows 操作系统上的 python3.1 之后才可用,这可能很重要...
python3.1 Documentation
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):
插入自己的导入/代码...
【讨论】: