1

我想检索属于某个 Windows 用户组的用户数。从 Python API 的文档中:

win32net.NetLocalGroupGetMembers(server, group, *level*) 

我知道根据级别参数,我会得到不同的详细数据,对应于 Windows LOCALGROUP_MEMBERS_INFO_0、LOCALGROUP_MEMBERS_INFO_1、LOCALGROUP_MEMBERS_INFO_2 或 LOCALGROUP_MEMBERS_INFO_3 结构。

因此,如果 93 个用户属于指定的用户组,我希望始终获得其中一种类型的 93 个对象/结构。

但我的结果完全不同。这就是我得到的

>>> import win32net
>>> import win32api
>>> server = "\\\\" + win32api.GetComputerName()
>>> users = []
>>> group = u"MyGroup"
>>> (users, total, res) = win32net.NetLocalGroupGetMembers(server, group, 0)
>>> len(users)
93
>>> (users, total, res) = win32net.NetLocalGroupGetMembers(server, group, 1)
>>> len(users)
56
>>> (users, total, res) = win32net.NetLocalGroupGetMembers(server, group, 2)
>>> len(users)
39
>>> (users, total, res) = win32net.NetLocalGroupGetMembers(server, group, 3)
>>> len(users)
68

我希望获得 93 个用户。然后我想要 93 个用户名。指定 level=1 时可以访问用户名,并且使用该参数,仅返回 56。

有什么线索吗?谢谢。

4

3 回答 3

2

谢谢你的帮助。

这是结果:-)

import win32net
import win32api
import win32netcon

server = "\\\\" + win32api.GetComputerName()
users = []
result = []
group = "MyGroup"
handle = 0
level = 1
while True:
    (users, total, handle2) = win32net.NetLocalGroupGetMembers(server, group,
                                level, handle, win32netcon.MAX_PREFERRED_LENGTH)
    for u in users:
        result.append(u)
    if handle2 == 0:
        break
    else:
        handle = handle2
print len(result)
于 2013-09-20T14:14:50.300 回答
2

由于请求级别的数据大小,该调用返回不同数量的结果。您可以使用返回的恢复句柄继续获取其余部分,或增加缓冲区大小以在一次调用中获取所有结果。

这是 pywin32 帮助文件中的完整参数列表: NetLocalGroupGetMembers(server, groupName , level , resumeHandle , prefLen )

于 2013-09-20T07:39:21.620 回答
0

除了@Sun Wikong 的回答之外,我还制作了一个 pip 包来获得用户成员资格以及许多其他功能。

安装pip install windows_tools.users

用法:

import windows_tools.users as users

# We use group SID instead of name so we get actual results regardless of system locale
# You can use well_known_sids() for translation, eg
# sid = well_known_sids(username='Administrators')
# or
# usernname = well_known_sids(sid='S-1-5-32-545')


members = users.get_local_group_members(group_sid='S-1-5-32-545')
for member in members:
    print(member)

您可能还想检查用户是否是本地管理员:


# if no user is given, current one is used
is_admin = is_user_local_admin('myuser')
print(is_admin)
于 2021-10-11T16:05:31.103 回答