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

时间:2011-09-26 20:19:14

标签: python windows winapi administration

我在局域网上使用此脚本来让每台机器列出他们的本地管理员和用户。在我们的网络中存在安全漏洞,一些学生已经在目录下创建了本地管理员,我们需要找出它们的位置。它导入的列表只包含其中列出的整个网络的IP地址,如

192.168.1.1
192.168.1.2
192.168.1.3

当列表中只有一个IP时,脚本会运行并向机器上的所有本地管理员/用户报告,但是当有两个或更多时,脚本会出错并出现错误:(1722,'NetGroupGetUsers' ,'RPC服务器不可用。')当它们中的任何一个被自己放入时,它们列出的很好,所以它不是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 个答案:

答案 0 :(得分:1)

正如你在这里所说的那样,在第一次调用GetUsers()之后文件被关闭了 - 你应该使用F.close()。

我的猜测是真正的问题是该行上无关的换行符,所以请尝试:

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

F.close()

作为Python风格的问题,四空缩进远比单空格要好,函数定义和局部变量名应以小写字符开头(例如currentIp,getUsers())。