2009-02-26 4 views
4

Comment puis-je modifier l'expiration du mot de passe à «jamais» sur Windows XP pour un utilisateur local avec Python? J'ai les modules PyWIN et WMI à bord mais je n'ai pas de solution. J'ai réussi à interroger les paramètres actuels via WMI (basé sur la classe Win32_UserAccount), mais comment le modifier?Comment puis-je modifier l'expiration du mot de passe dans Windows en utilisant Python?

+0

Je serais très inquiet si Windows permettait au code externe de changer les paramètres utilisateur. Quelle utilisation pourrait-elle être à des fins légitimes? Laissez l'administration du système aux outils d'administration intégrés fournis. – HardCode

+0

Dans ce cas, je recommande de demander "comment puis-je faire X en utilisant win32 api" plutôt que "comment puis-je faire X en utilisant Python" parce que vous finirez par utiliser win32 api et en formulant la question comme ça pourrait vous donner plus de réponses . –

Répondre

0

Ce changement nécessiterait des autorisations d'administrateur, ce qui peut (ou non) causer des problèmes dans PyWin32. Je ne vois aucune manière simple de faire cette modification à partir d'un script Python, mais je suis sûr que cela peut être automatisé en utilisant une méthode différente.

Ce fil de MSFN semble avoir d'informations qui vous aideront, ou tout au moins un début:

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

0

Vous pourriez avoir besoin administrateur priviliges de le faire, alors regardez en élevant le processus en cours ou lancer une nouveau processus avec plus de privilèges. (C'est-à-dire quelque chose comme UAC Vista, mais sur XP.)

Ne peut pas aider avec des détails si. : -/

1

Si vous exécutez votre script python avec ActvePython contre Active Directory, vous pouvez utiliser quelque chose comme ceci:

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() 

Mais si votre python est en cours d'exécution sous unix, vous avez besoin de deux choses pour parler à Active Directory: Kerberos et LDAP. Une fois que vous avez une connexion LDAP authentifiée SASL (GSSAPI (KRB5)) sur votre serveur Active Directory, vous accédez à l'attribut "userAccountControl" de l'utilisateur cible.

userAccountControl est un attribut entier, traité comme un champ de bit, sur lequel vous devez définir le bit DONT EXPIRE PASSWORD. Voir this KB article pour les valeurs de bit.

+0

Pour les comptes locaux, j'ai trouvé que j'avais besoin de 'userFlags' plutôt que de' userAccountControl'. – Gabe

Questions connexes