使用Win32net列出本地用户的Python脚本

0 投票
1 回答
3083 浏览
提问于 2025-04-17 03:08

我在局域网(LAN)上使用这个脚本,目的是让每台机器列出它们的本地管理员和用户。最近我们的网络出现了安全问题,有几个学生在目录外创建了本地管理员账户,我们需要找出这些账户在哪里。这个脚本导入的列表里只包含了整个网络的IP地址,像这样:

192.168.1.1
192.168.1.2
192.168.1.3

当列表中只有一个IP地址时,脚本可以正常工作,并返回该机器上的所有本地管理员和用户。但是当列表中有两个或更多的IP地址时,脚本就出错了,错误信息是:(1722, 'NetGroupGetUsers', 'RPC服务器不可用。') 当单独输入其中任何一个IP时,它们都能正常列出,所以问题不是出在IP地址上。

import win32net

def GetUsers( IP ):
 print IP,
 print win32net.NetGroupGetUsers(IP,'none',0), 
return

F = open("C:\Users\JOHNDOE\Desktop\IP_List.txt")

for CurrentIP in F:
 GetUsers(CurrentIP),

 F.close()

我对Python编程还比较陌生,所以我承认我可能在写这个脚本时犯了个低级错误。根据我看到的,使用VBscript可以更简单地完成这个任务,但我们的主管告诉我们必须用Python来做。任何帮助都会非常感激。

1 个回答

1

你这里的代码在第一次调用GetUsers()后就关闭了文件,所以你应该把F.close()的缩进减少一级。

我猜真正的问题可能是行里多了不必要的换行符,所以你可以试试:

for CurrentIP in F.readlines():
    GetUsers( CurrentIP.strip() );

F.close()

从Python的风格来看,四个空格的缩进比一个空格的缩进要好得多,而且函数定义和局部变量的名字应该以小写字母开头(比如currentIp,getUsers())。

撰写回答