【问题标题】:Determine if current user is in Administrators group (Windows/Python)确定当前用户是否在管理员组中(Windows/Python)
【发布时间】:2011-01-27 18:02:20
【问题描述】:

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

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

【问题讨论】:

    标签: python windows administrator


    【解决方案1】:

    你可以试试this:

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

    【讨论】:

    • UAC启动时IT不工作,看来这个功能检查进程权限。
    • IsUserAnAdmin() 仅适用于 Windows XP。它不能在更高版本的 Windows 上正常工作。
    【解决方案2】:
    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”将是“管理员”

    【讨论】:

      【解决方案3】:

      我想感谢Vlad Bezden,因为如果没有他使用 win32net 模块,这里的答案将不存在。

      如果您真的想知道用户是否有能力作为管理员过去的 UAC,您可以执行以下操作。如果需要,它还会列出当前用户所在的组。
      它适用于大多数(全部?)语言设置
      本地组只需以“Admin”开头,它通常会这样做...
      (有谁知道某些设置是否会有所不同?)

      要使用此代码 sn-p 您需要安装 pywin32 模块, 如果你还没有它,你可以从 PyPI 获取它:pip install pywin32

      重要提示:
      对于某些用户/编码人员来说,函数os.getlogin() 仅在 Windows 操作系统上的 python3.1 之后才可用,这可能很重要... 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 sleepsleep(10)

      插入自己的导入/代码...

      【讨论】:

        猜你喜欢
        • 2020-01-23
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 2013-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多