使用Python更改Windows密码

时间:2013-04-18 09:39:17

标签: python passwords

我正在使用Python开发一个小密码管理器工具。 它允许中央密码管理器和单次使用密码,因此没有人会知道服务器的密码,当员工去另一个雇主时我们不需要更改所有密码。

无论如何,该软件的设计是为了Phone-Home(因此消除了许多防火墙/ Natting问题)并作为服务运行。我们现在可以同步系统的用户,验证我们获得的密码是否正确。但是登录后重置密码是我们目前正在努力解决的问题。

win32.net NetUserchangePassword似乎拥有我们想要的东西。正如(我认为)它称为“网络用户*”。 经过测试,我发现它确实称为msvc libs的netUserchangePassword功能。问题是当我输入旧密码为无时,它不起作用。

该过程以完全管理员身份运行。并且应该能够在不知道旧的情况下更改用户密码(免责声明:我来自unix背景,因此root(superadmin)可以做任何事情,如果我对Windows操作系统有误,请指教我。)

那么,作为超级管理员,如何在不知道使用Python脚本语言的旧密码的情况下更改本地用户的密码?

谢谢!

更新

def set_password(username, password):
    from win32com import adsi
    ads_obj = adsi.ADsGetObject("WinNT://localhost/%s,user" % username)
    ads_obj.Getinfo()
    ads_obj.Put('Password', password)
    ads_obj.SetInfo()


def verify_success(username, password):
    from win32security import LogonUser
    from win32con import LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT
    try:
        LogonUser(username, None, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT)
    except:
        return False
    return True

u = "test_usr"
p = "TheNewStrongP@S$w0rd!"
set_password(u, p)
if verify_success(u, p):
    print "W00t it workz"
else:
    print "Continue Googling"

猜猜什么,不起作用。

2 个答案:

答案 0 :(得分:3)

能够正常工作

import subprocess

subprocess.call("net users "+username+" "+password, shell = True)

答案 1 :(得分:1)

在示例中。变化:

ads_obj.Put('Password', password)
ads_obj.SetInfo()

使用:

ads_obj.SetPassword(password)

问题解决了:))