[R] Création de comptes utilisateurs...

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
djzerty
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 25 mars 2009 09:32
Status : Hors ligne

[R] Création de comptes utilisateurs...

#1

Message 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
Modifié en dernier par djzerty le mar. 31 mars 2009 14:34, modifié 4 fois.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: Création de comptes utilisateurs...

#2

Message 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.
djzerty
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 25 mars 2009 09:32
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#3

Message 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.
++
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#4

Message 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
djzerty
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 25 mars 2009 09:32
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#5

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#6

Message par Tlem »

@djzerty

La coloration syntaxique du code est réservée aux forums :
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#7

Message 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 ;)
djzerty
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 25 mars 2009 09:32
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#8

Message 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
djzerty
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 25 mars 2009 09:32
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#9

Message 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.
++
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#10

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#11

Message 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
djzerty
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 25 mars 2009 09:32
Status : Hors ligne

Re: [..] Création de comptes utilisateurs...

#12

Message 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.
totov
Niveau 1
Niveau 1
Messages : 7
Enregistré le : sam. 18 avr. 2009 11:06
Status : Hors ligne

Re: [R] Création de comptes utilisateurs...

#13

Message par totov »

Bonsoir !
Et pour modifier un mot de passe, comment on s'y prend ??
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [R] Création de comptes utilisateurs...

#14

Message 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 ...
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Répondre