NetLocalGroupGetMembers根据LOCALGROUP_MEMBERS_INFO值返回不同的成员编号

时间:2013-09-19 09:45:25

标签: python windows winapi pywin32

我想检索属于某个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个用户属于指定的userGroup,我希望始终获得其中一种类型的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。

有任何线索吗?感谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

感谢您的帮助。

结果如下: - )

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)