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 :wink: )
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

Code : Tout sélectionner

dim $strComputer = @ComputerName
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.
:o

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... :D

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

Code : Tout sélectionner

$objUser.SetPassword ($strPassword)
 
peut être finaliser par

Code : Tout sélectionner

$objUser.SetInfo
 
mais là je suis moins certain ...