我想检索属于某个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。有任何线索吗?感谢。
答案 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)