Page 1 sur 1
[R] Création de comptes utilisateurs...
Posté : lun. 30 mars 2009 10:17
par djzerty
Bonjours,
Je débute en AutoIt et je doit créer un programme pour automatiser l'installation des postes de mon entreprise.
J'ai trouvé sur le Net puis adapté cette fonction pour créer les utilisateurs.
Seul problème, je n'arrive pas à faire appliquer le flag "le mot de passe n'espire jamais".
J'ai essayer d'adapter par rapport au VBS ( "objUser.Put "userAccountControl", intAccValue" ) mais pas moyen.
Si vous aviez la réponse se serrai vraiement cool.
Merci d'avance.
Code : Tout sélectionner
CreateAccount("admin","Administrateur","password","Administrateurs")
Func CreateAccount($strUserName,$strFullName,$strPassword,$strGroup)
; RETRIEVE Computer Name
Dim $objNetwork, $strComputerName
$objNetwork = ObjCreate("WScript.Network")
$strComputer = $objNetwork.ComputerName
; Code To add User
$objSystem = ObjGet("WinNT://" & $strComputer)
$objUser = $objSystem.Create("user", $strUserName)
$objUser.FullName = $strFullName
$objUser.SetPassword ($strPassword)
;$objUser.userAccountControl = 65536
$objUser.SetInfo
; Code to add User to Group
$objGroup = ObjGet("WinNT://" & $strComputer & "/" & $strGroup)
$objGroup.Add("WinNT://" & $strUserName)
EndFunc
Re: Création de comptes utilisateurs...
Posté : lun. 30 mars 2009 10:39
par ani
bonjour,
merci de bien vouloir lire ce chapitre svp
http://www.autoitscript.fr/forum/viewto ... f=35&t=595
Pour votre problème, je ne vois pas le flag dans le code ci-dessus.
Re: [..] Création de comptes utilisateurs...
Posté : lun. 30 mars 2009 10:58
par djzerty
Mon Flag est citué au niveau de l'avant dernière ligne commentée.
Elle est commentée car elle ne fonctionne pas (d'où mon POST

)
Sans elle le programme fonctionne très bien sinon aucun compte n'est créé si elle est activé.
Merci de votre réponse.
++
Re: [..] Création de comptes utilisateurs...
Posté : lun. 30 mars 2009 11:25
par ani
ok, après une recherche chez microsoft, la valeur UserAccountControl "never password expired" équivaut à 66048.
Code : Tout sélectionner
$intAccValue = 66048
objUser.Put("userAccountControl", $intAccValue)
Ceux-ci peut être modifié en utilisant la macro
Code : Tout sélectionner
Dim $objNetwork, $strComputerName
$objNetwork = ObjCreate("WScript.Network")
$strComputer = $objNetwork.ComputerName
deviend
Le script vb tu peu me l'envoier en pm ? ou ici ?
Bon je continue mes recherches
Re: [..] Création de comptes utilisateurs...
Posté : lun. 30 mars 2009 14:31
par djzerty
Voilà un exemple en VBS qui active l'option sur un serveur LDAP.
Je n'arrive pas à convertir en AutoIt la partie:
objUser.Put "userAccountControl", intUAC XOR _ ADS_UF_DONT_EXPIRE_PASSWD
Merci de votre aide.
Code : Tout sélectionner
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Set objUser = GetObject _
("LDAP://cn=myerken,ou=management,dc=fabrikam,dc=com")
intUAC = objUser.Get("userAccountControl")
If ADS_UF_DONT_EXPIRE_PASSWD AND intUAC Then
Wscript.Echo "Already enabled"
Else
objUser.Put "userAccountControl", intUAC XOR _
ADS_UF_DONT_EXPIRE_PASSWD
objUser.SetInfo
WScript.Echo "Password never expires is now enabled"
End If
Re: [..] Création de comptes utilisateurs...
Posté : lun. 30 mars 2009 20:41
par Tlem
@djzerty
La coloration syntaxique du code est réservée aux forums :
Re: [..] Création de comptes utilisateurs...
Posté : lun. 30 mars 2009 22:21
par ani
Code : Tout sélectionner
Global Const $ADS_UF_DONT_EXPIRE_PASSWD = 0x10000
Global $objUser = ObjGet("LDAP://cn=myerken,ou=management,dc=fabrikam,dc=com")
$intUAC = $objUser.Get("userAccountControl")
If $ADS_UF_DONT_EXPIRE_PASSWD AND $intUAC Then
msgbox(0,"","Already enabled",5)
Else
$objUser.Put("userAccountControl", BitOR($intUAC,$ADS_UF_DONT_EXPIRE_PASSWD))
$objUser.SetInfo
MsgBox(0,"","Password never expires is now enabled",5)
EndIf
Exit
1 ere ligne la valeur de contruction ADS_UF_DONT_EXPIRE_PASSWD = &h10.... çà deviend normalement
&h équivaut
0x (zero et x) suivit du reste.
Chaque
variable vb(s) se voit ajouter le caractére $ devant.
les echo on les nommes comme on veut soit des
msgbox ou des
consolewrite ou
filewritelog ect... de toute manière on arrive à la meme conclusion affiche la variable !!! :p
le mot
set en vb deviend Global ou Local de toue mani!re autoit te préviendra en cas d'erreur
le mot
XOR lui devient
BitOr (c'est pour revenir au même) le mot précédé devient premier élèment
bein voilà on à fait le tour
Hm ej vois qu'on à pas lu le lien désigné dans le second post
SI t'a un script vb complet envoi

Re: [..] Création de comptes utilisateurs...
Posté : mar. 31 mars 2009 08:59
par djzerty
Merci Ani pour ton aide, je vais essayer de convertir ce VBS.
Sinon je n'ai pas de code complet vbs pour ce que je veux faire.
@Tlem, désolé pour la couleur syntaxique, je n'aivais pas vu cette restriction.
Dans le même themes, que me reprochez vous d'autre sur le règlement du forum.
Encore Merci de votre aide.

Re: [..] Création de comptes utilisateurs...
Posté : mar. 31 mars 2009 09:17
par djzerty
RE:
Ca bloque toujours au même niveau.
Voici le code un peut modifier pour les tests et le Log AutoIt.
Code : Tout sélectionner
Global Const $ADS_UF_DONT_EXPIRE_PASSWD = 0x10000
$objNetwork = ObjCreate("WScript.Network")
$strComputer = $objNetwork.ComputerName
$strUserName = "Administrateur"
Global $objUser = ObjGet("WinNT://" & $strComputer & "/" & $strUserName)
$intUAC = $objUser.Get("userAccountControl")
If $ADS_UF_DONT_EXPIRE_PASSWD AND $intUAC Then
msgbox(0,"","Already enabled",5)
Else
$objUser.Put("userAccountControl", BitOR($intUAC,$ADS_UF_DONT_EXPIRE_PASSWD))
$objUser.SetInfo
MsgBox(0,"","Password never expires is now enabled",5)
EndIf
Exit
Code : Tout sélectionner
>"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "E:\Projets\Dev en cours\Harmony\pass_never_expire.au3" /autoit3dir "C:\Program Files\AutoIt3" /UserParams
+>09:10:07 Starting AutoIt3Wrapper v.1.10.1.14 Environment(Language:040C Keyboard:0000040C OS:WIN_XP/Service Pack 3 CPU:X86 ANSI)
>Running AU3Check (1.54.14.0) from:C:\Program Files\AutoIt3
+>09:10:07 AU3Check ended.rc:0
>Running:(3.3.0.0):C:\Program Files\AutoIt3\autoit3.exe "E:\Projets\Dev en cours\Harmony\pass_never_expire.au3"
E:\Projets\Dev en cours\Harmony\pass_never_expire.au3 (7) : ==> The requested action with this object has failed.:
$intUAC = $objUser.Get("userAccountControl")
$intUAC = $objUser.Get("userAccountControl")^ ERROR
->09:10:10 AutoIT3.exe ended.rc:1
+>09:10:11 AutoIt3Wrapper Finished
>Exit code: 1 Time: 4.278
J'espère que l'affichage du log avec les balises code ne vous dérange pas? ve ne savais pas quoi utiliser.
++
Re: [..] Création de comptes utilisateurs...
Posté : mar. 31 mars 2009 11:53
par Tlem
L'affichage du log est très bien comme ça.
Pour le reste des règles de présentation, tout est ici :
règles de présentation d'un message.
Re: [..] Création de comptes utilisateurs...
Posté : mar. 31 mars 2009 13:19
par ani
l'erreur nous dit
"The requested action with this object has failed.:" la requête sur l'objet a échoué.
Il nous donne comme information cette ligne
Code : Tout sélectionner
$intUAC = $objUser.Get("userAccountControl")
$intUAC = $objUser.Get("userAccountControl")^ ERROR
l'objet c'est $objuser et non la variable $intuac
Test en retirant le mot
glogal .
Ou ce qui pourrait être le plus probable c'est :
Comme tu l'avait formulé auparavant ce code est utilisé par le LDAP, il se pourrait que useraccountControl soit inexistant dans l'objet winNt

Remplace
useraccountcontrol par
userFlags comme nous l'indique microsoft

, =merci

Code : Tout sélectionner
Global Const $ADS_UF_DONT_EXPIRE_PASSWD = 0x10000 ; ou cette valeur 65536
$objNetwork = ObjCreate("WScript.Network")
$strComputer = $objNetwork.ComputerName
;$strComputer = @ComputerName
$strUserName = "Administrateur"
Global $objUser = ObjGet("WinNT://" & $strComputer & "/" & $strUserName)
$intUAC = $objUser.Get("userFlags")
If $ADS_UF_DONT_EXPIRE_PASSWD AND $intUAC Then
msgbox(0,"","Already enabled",5)
Else
$objUser.Put("userFlags", BitOR($intUAC,$ADS_UF_DONT_EXPIRE_PASSWD))
$objUser.SetInfo
MsgBox(0,"","Password never expires is now enabled",5)
EndIf
Exit
Re: [..] Création de comptes utilisateurs...
Posté : mar. 31 mars 2009 14:33
par djzerty
Génial ça marche...
Pour rappel, voiçi le code qui fonctionne.
Encore Merci et @+
Code : Tout sélectionner
CreateAccount("admin","Administrateur","password","Administrateurs")
Func CreateAccount($strUserName,$strFullName,$strPassword,$strGroup)
; RETRIEVE Computer Name
Dim $objNetwork, $strComputerName
$objNetwork = ObjCreate("WScript.Network")
$strComputer = $objNetwork.ComputerName
; Code To add User
$objSystem = ObjGet("WinNT://" & $strComputer)
$objUser = $objSystem.Create("user", $strUserName)
$objUser.FullName = $strFullName
$objUser.SetPassword ($strPassword)
;~ Pour Info Voici les différents flags en hexa.
;~ 0x2 Account Disabled
;~ 0x10 Account Locked out
;~ 0x20 Password Not Required
;~ 0x40 Cannot Change Password
;~ 0x10000 Password Never Expires
;~ 0x800000 Password Expired
$objUser.userFlags = 0x10000
$objUser.SetInfo
; Code to add User to Group
$objGroup = ObjGet("WinNT://" & $strComputer & "/" & $strGroup)
$objGroup.Add("WinNT://" & $strUserName)
EndFunc
Donc pour résumer, ce code crée un compte utilisateur admin avec le mot de passe "password" dans le groupe "Administrateur" et dont le mot de passe n'expire jamais.
Encore merci Ani pour avoir trouvé la soluce.
Re: [R] Création de comptes utilisateurs...
Posté : lun. 05 oct. 2009 23:30
par totov
Bonsoir !
Et pour modifier un mot de passe, comment on s'y prend ??
Re: [R] Création de comptes utilisateurs...
Posté : mar. 06 oct. 2009 00:10
par sylvanie
je pense que la sélection du user se fait via
Code : Tout sélectionner
Global $objUser = ObjGet("WinNT://" & $strComputer & "/" & $strUserName)
puis le set via
peut être finaliser par
mais là je suis moins certain ...