【问题标题】:How can I modify password expiration in Windows using Python?如何使用 Python 在 Windows 中修改密码过期?
【发布时间】:2010-10-10 03:07:18
【问题描述】:

如何在 Windows XP 上为使用 Python 的本地用户修改密码过期时间为“从不”?我有 PyWIN 和 WMI 模块,但没有解决方案。我设法通过 WMI(基于 Win32_UserAccount 类)查询当前设置,但是如何修改呢?

【问题讨论】:

  • 如果 Windows 允许外部代码更改用户设置,我会非常担心。这有什么可能用于合法目的?将系统管理留给提供的内置管理工具。
  • 在这种情况下,我建议问“我如何使用 win32 api 执行 X”而不是“我如何使用 Python 执行 X”,因为无论如何您最终都会使用 win32 api 并提出问题这样可以为您提供更多答案。

标签: python windows passwords


【解决方案1】:

该更改需要管理员权限,这可能(也可能不会)导致 PyWin32 内部出现问题。我没有看到任何直接从 Python 脚本进行此更改的方法,但我确信这可以使用不同的方法自动完成。

这个 MSFN 线程似乎有可以帮助你的信息,或者至少是一个开始:

http://www.msfn.org/board/Password-Expires-Chang-t115757.html

【讨论】:

    【解决方案2】:

    您可能需要管理员权限才能执行此操作,因此请考虑提升当前进程或启动具有更多权限的新进程。 (即类似于 vista 的 UAC,但在 XP 上。)

    虽然无法提供详细信息。 :-/

    【讨论】:

      【解决方案3】:

      如果您使用 ActvePython 针对 Active Directory 运行您的 python 脚本,那么您可以使用如下内容:

      import win32com.client
      ads = win32com.client.Dispatch('ADsNameSpaces')
      user = ads.getObject("", "WinNT://DOMAIN/username,user")
      user.Getinfo()
      user.Put('userAccountControl', 65536 | user.Get('userAccountControl'))
      user.Setinfo()
      

      但是如果你的 python 在 unix 下运行,你需要两件事来与 Active Directory 对话:Kerberos 和 LDAP。与 Active Directory 服务器建立 SASL(GSSAPI(KRB5)) 身份验证的 LDAP 连接后,即可访问目标用户的“userAccountControl”属性。

      userAccountControl 是一个整数属性,被视为一个位字段,您必须在其上设置 DONT EXPIRE PASSWORD 位。位值见this KB article

      【讨论】:

      • 对于本地帐户,我发现我需要userFlags 而不是userAccountControl
      猜你喜欢
      • 2016-08-30
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      相关资源
      最近更新 更多