代码之家  ›  专栏  ›  技术社区  ›  FogleBird

确定当前用户是否属于管理员组(Windows/python)

  •  4
  • FogleBird  · 技术社区  · 14 年前

    我希望只有当前用户是管理员时才能访问应用程序中的某些功能。

    如何在Windows上使用python来确定当前用户是否在本地管理员组中?

    3 回复  |  直到 6 年前
        1
  •  6
  •   ChristopheD    14 年前

    你可以试试 this :

    import ctypes
    print ctypes.windll.shell32.IsUserAnAdmin()
    
        2
  •  1
  •   Vlad Bezden    8 年前
    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'))
    

    当然,在您的情况下,“某些组”将是“管理员”

        3
  •  0
  •   TheGeekGuy    6 年前

    我想表扬一下 Vlad Bezden ,因为如果不使用win32net模块,这里的答案将不存在。

    如果你真的想知道用户是否有能力担任管理员 过去的UAC 您可以执行以下操作。它还列出了当前用户所在的组(如果需要)。
    它会起作用的 (全部?) 语言设置 .
    本地组只需从“admin”开始,它通常是这样做的…
    (有人知道某些设置是否会不同吗?)

    要使用此代码段,您需要 pywin32 模块已安装, 如果你还没有,你可以从Pypi那里得到: pip install pywin32

    重要的是要知道:
    对于某些用户/编码人员来说,函数 os.getlogin() 仅在python3.1之后在Windows操作系统上可用… python3.1 Documentation

    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) :

    插入自己的导入/代码…