Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

modifier option d'un compte AD

12 réponses
Avatar
Nico
Bonjour =E0 tous,

J'ai un soucis avec un script pour cr=E9er des utilisateurs=20
sous active directory. Enfin ce n'est pas pour la cr=E9ation=20
proprement dite, mais plutot pour la modification des=20
options du compte.=20
Je souhaiterais que le mot de passe n'expire jamais (=E7a=20
c'est bon cela fonctionne) et que l'utilisateur ne puisse=20
pas changer de mot de passe (mon probl=E8me est l=E0).
Est ce que quelqu'un peut m'aider?

voil=E0 mon script:

wscript.echo "Le script commence. Cliquez OK pour=20
continuer."
DIM arrRecord
Dim Nom, Prenom, CodeUtilisateur
Dim NomScript, userActCtrl
Const ForReading =3D 1

Const ADS_UF_PASSWD_CANT_CHANGE =3D &H40
Const ADS_UF_DONT_EXPIRE_PASSWD =3D &H10000

Nom=3D"AA": Prenom=3D"AAAAAA": CodeUtilisateur=3D"AA_AAAAAA"
NomScript=3D"mon_script.bat"

Set Root =3D GetObject("LDAP://RootDSE")
DomainPath =3D Root.Get("DefaultNamingContext")
Set Domain =3D GetObject("LDAP://" & DomainPath)
Set ou_HR =3D GetObject("LDAP://CN=3DUsers, " & DomainPath)

Set adsUser =3D ou_HR.Create("user", "CN=3D" & Nom & " " &=20
Prenom)
adsUser.Put "sn", Nom=20
adsUser.Put "GivenName", Prenom=20
adsUser.Put "Name", Nom & " " & Prenom=20
adsUser.Put "displayName", Nom & " " & Prenom=20
adsUser.Put "sAMAccountName", CodeUtilisateur '=20
adsUser.Put "userPrincipalName", CodeUtilisateur
adsUser.Put "scriptPath", NomScript =20
adsUser.SetInfo
adsUser.SetPassword "0123456"
adsUser.SetInfo

userActCtrl =3D adsUser.Get("userAccountControl")
userActCtrl =3D userActCtrl xOr ADS_UF_DONT_EXPIRE_PASSWD=20
xOr ADS_UF_PASSWD_CANT_CHANGE
adsUser.Put "userAccountControl", userActCtrl

adsUser.AccountDisabled =3D False
adsUser.SetInfo

Set adsUser =3D Nothing

wscript.echo "Utilisateurs cr=E9=E9s.", Chr(10),Chr
(10),"Cliquez pour finir."

10 réponses

1 2
Avatar
Jonathan Bismuth
pour l'impossibilité de changer le mot de passe, ceci devrait marcher (à
adapter un poil):

'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}"
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### Verouillage du changement de mot de passe

Set objSD = adsUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
adsUser.Put "nTSecurityDescriptor", objSD
adsUser.SetInfo

--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter
"Nico" a écrit dans le message de
news: 051101c50e85$6de43a00$
Bonjour à tous,

J'ai un soucis avec un script pour créer des utilisateurs
sous active directory. Enfin ce n'est pas pour la création
proprement dite, mais plutot pour la modification des
options du compte.
Je souhaiterais que le mot de passe n'expire jamais (ça
c'est bon cela fonctionne) et que l'utilisateur ne puisse
pas changer de mot de passe (mon problème est là).
Est ce que quelqu'un peut m'aider?

voilà mon script:

wscript.echo "Le script commence. Cliquez OK pour
continuer."
DIM arrRecord
Dim Nom, Prenom, CodeUtilisateur
Dim NomScript, userActCtrl
Const ForReading = 1

Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Nom="AA": Prenom="AAAAAA": CodeUtilisateur="AA_AAAAAA"
NomScript="mon_script.bat"

Set Root = GetObject("LDAP://RootDSE")
DomainPath = Root.Get("DefaultNamingContext")
Set Domain = GetObject("LDAP://" & DomainPath)
Set ou_HR = GetObject("LDAP://CN=Users, " & DomainPath)

Set adsUser = ou_HR.Create("user", "CN=" & Nom & " " &
Prenom)
adsUser.Put "sn", Nom
adsUser.Put "GivenName", Prenom
adsUser.Put "Name", Nom & " " & Prenom
adsUser.Put "displayName", Nom & " " & Prenom
adsUser.Put "sAMAccountName", CodeUtilisateur '
adsUser.Put "userPrincipalName", CodeUtilisateur
adsUser.Put "scriptPath", NomScript
adsUser.SetInfo
adsUser.SetPassword "0123456"
adsUser.SetInfo

userActCtrl = adsUser.Get("userAccountControl")
userActCtrl = userActCtrl xOr ADS_UF_DONT_EXPIRE_PASSWD
xOr ADS_UF_PASSWD_CANT_CHANGE
adsUser.Put "userAccountControl", userActCtrl

adsUser.AccountDisabled = False
adsUser.SetInfo

Set adsUser = Nothing

wscript.echo "Utilisateurs créés.", Chr(10),Chr
(10),"Cliquez pour finir."
Avatar
Nico
j'ai inséré ton bout de code dans mon script et j'obtient
un message d'erreur sur la ligne
du 'adsUser.Put "nTSecurityDescriptor", objSD'
Le message d'erreur est : "Structure d'ID de sécurité non
valide", code: 80070539, source :(null)

-----Message d'origine-----
pour l'impossibilité de changer le mot de passe, ceci
devrait marcher (à

adapter un poil):

'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"

Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### Verouillage du changement de mot de passe

Set objSD = adsUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
adsUser.Put "nTSecurityDescriptor", objSD
adsUser.SetInfo

--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter
"Nico" a écrit dans
le message de

news: 051101c50e85$6de43a00$
Bonjour à tous,

J'ai un soucis avec un script pour créer des utilisateurs
sous active directory. Enfin ce n'est pas pour la création
proprement dite, mais plutot pour la modification des
options du compte.
Je souhaiterais que le mot de passe n'expire jamais (ça
c'est bon cela fonctionne) et que l'utilisateur ne puisse
pas changer de mot de passe (mon problème est là).
Est ce que quelqu'un peut m'aider?

voilà mon script:

wscript.echo "Le script commence. Cliquez OK pour
continuer."
DIM arrRecord
Dim Nom, Prenom, CodeUtilisateur
Dim NomScript, userActCtrl
Const ForReading = 1

Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Nom="AA": Prenom="AAAAAA": CodeUtilisateur="AA_AAAAAA"
NomScript="mon_script.bat"

Set Root = GetObject("LDAP://RootDSE")
DomainPath = Root.Get("DefaultNamingContext")
Set Domain = GetObject("LDAP://" & DomainPath)
Set ou_HR = GetObject("LDAP://CN=Users, " & DomainPath)

Set adsUser = ou_HR.Create("user", "CN=" & Nom & " " &
Prenom)
adsUser.Put "sn", Nom
adsUser.Put "GivenName", Prenom
adsUser.Put "Name", Nom & " " & Prenom
adsUser.Put "displayName", Nom & " " & Prenom
adsUser.Put "sAMAccountName", CodeUtilisateur '
adsUser.Put "userPrincipalName", CodeUtilisateur
adsUser.Put "scriptPath", NomScript
adsUser.SetInfo
adsUser.SetPassword "0123456"
adsUser.SetInfo

userActCtrl = adsUser.Get("userAccountControl")
userActCtrl = userActCtrl xOr ADS_UF_DONT_EXPIRE_PASSWD
xOr ADS_UF_PASSWD_CANT_CHANGE
adsUser.Put "userAccountControl", userActCtrl

adsUser.AccountDisabled = False
adsUser.SetInfo

Set adsUser = Nothing

wscript.echo "Utilisateurs créés.", Chr(10),Chr
(10),"Cliquez pour finir."


.



Avatar
Jonathan Bismuth
il faudrait que je vois ton script.

Pour faire simple, voici une version light de mon script perso de création
et modification user comme ce que tu désire faire, plus ajout dans une OU
et un groupe spécifiques


'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}"
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### constantes groupe, OU et domaines
'Const Group= "CN=nom_groupe,"
'Const GrOU = "OU=ou_du_groupe,"
'Const OU = "OU=OU_où_creer__l_utilisateur,"
'Const Domain = "DC=domaine"

'#### Création de l'utilisateur

Set objOU = GetObject("LDAP://"& OU & Domain)

Set objUser = objOU.Create("user","cn="&user)
objUser.Put "sAMAccountName",""&user
objUser.Put "UserPrincipalName",""&user
objUser.SetInfo

'### Modification de la date d'expiration du mot de passe et du changement
de password au logon
objUser.AccountDisabledúlse
objUser.AccountExpirationDate = "01/01/1970"
objUser.Setinfo
objUser.Put "pwdLastSet", -1

'### verouillage du changement de mot de passe

Set objSD = objUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
objUser.Put "nTSecurityDescriptor", objSD
objUser.SetInfo

'### ajout du profil utilisateur et du flag de mot de passe ne change jamais
objUser.Put "profilePath", "servershare"&user
flags = objUser.Get("UserAccountControl")
objUser.Put "userAccountControl", 65536
objUser.SetInfo

'### ajout à un groupe spécifié en constante
Set objGroup = GetObject("LDAP://"& Group & GrOU & Domain)
objGroup.Add objUser.ADSPath
objGroup.Setinfo

Msgbox "utilisateur créé avec succès"

--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter
"Nico" a écrit dans le message de
news: 0ee201c50e8b$e7343ad0$
j'ai inséré ton bout de code dans mon script et j'obtient
un message d'erreur sur la ligne
du 'adsUser.Put "nTSecurityDescriptor", objSD'
Le message d'erreur est : "Structure d'ID de sécurité non
valide", code: 80070539, source :(null)

-----Message d'origine-----
pour l'impossibilité de changer le mot de passe, ceci
devrait marcher (à

adapter un poil):

'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"

Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### Verouillage du changement de mot de passe

Set objSD = adsUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
adsUser.Put "nTSecurityDescriptor", objSD
adsUser.SetInfo

--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter
"Nico" a écrit dans
le message de

news: 051101c50e85$6de43a00$
Bonjour à tous,

J'ai un soucis avec un script pour créer des utilisateurs
sous active directory. Enfin ce n'est pas pour la création
proprement dite, mais plutot pour la modification des
options du compte.
Je souhaiterais que le mot de passe n'expire jamais (ça
c'est bon cela fonctionne) et que l'utilisateur ne puisse
pas changer de mot de passe (mon problème est là).
Est ce que quelqu'un peut m'aider?

voilà mon script:

wscript.echo "Le script commence. Cliquez OK pour
continuer."
DIM arrRecord
Dim Nom, Prenom, CodeUtilisateur
Dim NomScript, userActCtrl
Const ForReading = 1

Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Nom="AA": Prenom="AAAAAA": CodeUtilisateur="AA_AAAAAA"
NomScript="mon_script.bat"

Set Root = GetObject("LDAP://RootDSE")
DomainPath = Root.Get("DefaultNamingContext")
Set Domain = GetObject("LDAP://" & DomainPath)
Set ou_HR = GetObject("LDAP://CN=Users, " & DomainPath)

Set adsUser = ou_HR.Create("user", "CN=" & Nom & " " &
Prenom)
adsUser.Put "sn", Nom
adsUser.Put "GivenName", Prenom
adsUser.Put "Name", Nom & " " & Prenom
adsUser.Put "displayName", Nom & " " & Prenom
adsUser.Put "sAMAccountName", CodeUtilisateur '
adsUser.Put "userPrincipalName", CodeUtilisateur
adsUser.Put "scriptPath", NomScript
adsUser.SetInfo
adsUser.SetPassword "0123456"
adsUser.SetInfo

userActCtrl = adsUser.Get("userAccountControl")
userActCtrl = userActCtrl xOr ADS_UF_DONT_EXPIRE_PASSWD
xOr ADS_UF_PASSWD_CANT_CHANGE
adsUser.Put "userAccountControl", userActCtrl

adsUser.AccountDisabled = False
adsUser.SetInfo

Set adsUser = Nothing

wscript.echo "Utilisateurs créés.", Chr(10),Chr
(10),"Cliquez pour finir."


.



Avatar
Voila mon script avec ton bout de script:

DIM arrRecord
Const ForReading = 1

Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Dim Nom, Prenom, CodeUtilisateur
Dim NomScript, userActCtrl

Nom="AA": Prenom="AAAAAA": CodeUtilisateur="AA_AAAAAA"
NomScript="mon_script.bat"

Set Root = GetObject("LDAP://RootDSE")
DomainPath = Root.Get("DefaultNamingContext")
Set Domain = GetObject("LDAP://" & DomainPath)
Set ou_HR = GetObject("LDAP://CN=Users, " & DomainPath)

Set adsUser = ou_HR.Create("user", "CN=" & Nom & " " &
Prenom)

adsUser.Put "sn", Nom
adsUser.Put "GivenName", Prenom
adsUser.Put "Name", Nom & " " & Prenom
adsUser.Put "displayName", Nom & " " & Prenom
adsUser.Put "sAMAccountName", CodeUtilisateur
adsUser.Put "userPrincipalName", CodeUtilisateur
adsUser.Put "scriptPath", NomScript
adsUser.SetInfo
adsUser.SetPassword "0123456"
adsUser.SetInfo

'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### Verouillage du changement de mot de passe
Dim objSD, objDACL, arrTrustees, objACE

Set objSD = adsUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
adsUser.Put "nTSecurityDescriptor", objSD
adsUser.SetInfo

userActCtrl = adsUser.Get("userAccountControl")
userActCtrl = userActCtrl xOr ADS_UF_DONT_EXPIRE_PASSWD
adsUser.Put "userAccountControl", userActCtrl
adsUser.SetInfo

adsUser.AccountDisabled = False
adsUser.SetInfo

Set adsUser = Nothing

-----Message d'origine-----
il faudrait que je vois ton script.

Pour faire simple, voici une version light de mon script
perso de création

et modification user comme ce que tu désire faire, plus
ajout dans une OU

et un groupe spécifiques


'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"

Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### constantes groupe, OU et domaines
'Const Group= "CN=nom_groupe,"
'Const GrOU = "OU=ou_du_groupe,"
'Const OU = "OU=OU_où_creer__l_utilisateur,"
'Const Domain = "DC=domaine"

'#### Création de l'utilisateur

Set objOU = GetObject("LDAP://"& OU & Domain)

Set objUser = objOU.Create("user","cn="&user)
objUser.Put "sAMAccountName",""&user
objUser.Put "UserPrincipalName",""&user
objUser.SetInfo

'### Modification de la date d'expiration du mot de passe
et du changement

de password au logon
objUser.AccountDisabledúlse
objUser.AccountExpirationDate = "01/01/1970"
objUser.Setinfo
objUser.Put "pwdLastSet", -1

'### verouillage du changement de mot de passe

Set objSD = objUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
objUser.Put "nTSecurityDescriptor", objSD
objUser.SetInfo

'### ajout du profil utilisateur et du flag de mot de
passe ne change jamais

objUser.Put "profilePath", "servershare"&user
flags = objUser.Get("UserAccountControl")
objUser.Put "userAccountControl", 65536
objUser.SetInfo

'### ajout à un groupe spécifié en constante
Set objGroup = GetObject("LDAP://"& Group & GrOU & Domain)
objGroup.Add objUser.ADSPath
objGroup.Setinfo

Msgbox "utilisateur créé avec succès"

--


Avatar
Jonathan Bismuth
crois moi ou pas, mais chez moi, la combinaison des deux fonctionne.

y'a pas un problème d'espace qui serait pas passé par mail?

--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter
a écrit dans le message de news:
058e01c50e90$196d4c40$
Voila mon script avec ton bout de script:

DIM arrRecord
Const ForReading = 1

Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Dim Nom, Prenom, CodeUtilisateur
Dim NomScript, userActCtrl

Nom="AA": Prenom="AAAAAA": CodeUtilisateur="AA_AAAAAA"
NomScript="mon_script.bat"

Set Root = GetObject("LDAP://RootDSE")
DomainPath = Root.Get("DefaultNamingContext")
Set Domain = GetObject("LDAP://" & DomainPath)
Set ou_HR = GetObject("LDAP://CN=Users, " & DomainPath)

Set adsUser = ou_HR.Create("user", "CN=" & Nom & " " &
Prenom)

adsUser.Put "sn", Nom
adsUser.Put "GivenName", Prenom
adsUser.Put "Name", Nom & " " & Prenom
adsUser.Put "displayName", Nom & " " & Prenom
adsUser.Put "sAMAccountName", CodeUtilisateur
adsUser.Put "userPrincipalName", CodeUtilisateur
adsUser.Put "scriptPath", NomScript
adsUser.SetInfo
adsUser.SetPassword "0123456"
adsUser.SetInfo

'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### Verouillage du changement de mot de passe
Dim objSD, objDACL, arrTrustees, objACE

Set objSD = adsUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
adsUser.Put "nTSecurityDescriptor", objSD
adsUser.SetInfo

userActCtrl = adsUser.Get("userAccountControl")
userActCtrl = userActCtrl xOr ADS_UF_DONT_EXPIRE_PASSWD
adsUser.Put "userAccountControl", userActCtrl
adsUser.SetInfo

adsUser.AccountDisabled = False
adsUser.SetInfo

Set adsUser = Nothing

-----Message d'origine-----
il faudrait que je vois ton script.

Pour faire simple, voici une version light de mon script
perso de création

et modification user comme ce que tu désire faire, plus
ajout dans une OU

et un groupe spécifiques


'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"

Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### constantes groupe, OU et domaines
'Const Group= "CN=nom_groupe,"
'Const GrOU = "OU=ou_du_groupe,"
'Const OU = "OU=OU_où_creer__l_utilisateur,"
'Const Domain = "DC=domaine"

'#### Création de l'utilisateur

Set objOU = GetObject("LDAP://"& OU & Domain)

Set objUser = objOU.Create("user","cn="&user)
objUser.Put "sAMAccountName",""&user
objUser.Put "UserPrincipalName",""&user
objUser.SetInfo

'### Modification de la date d'expiration du mot de passe
et du changement

de password au logon
objUser.AccountDisabledúlse
objUser.AccountExpirationDate = "01/01/1970"
objUser.Setinfo
objUser.Put "pwdLastSet", -1

'### verouillage du changement de mot de passe

Set objSD = objUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
objUser.Put "nTSecurityDescriptor", objSD
objUser.SetInfo

'### ajout du profil utilisateur et du flag de mot de
passe ne change jamais

objUser.Put "profilePath", "servershare"&user
flags = objUser.Get("UserAccountControl")
objUser.Put "userAccountControl", 65536
objUser.SetInfo

'### ajout à un groupe spécifié en constante
Set objGroup = GetObject("LDAP://"& Group & GrOU & Domain)
objGroup.Add objUser.ADSPath
objGroup.Setinfo

Msgbox "utilisateur créé avec succès"

--


Avatar
Nico
Ok merci de ton aide, je vais voir pourquoi ça déconne
chez moi.

encore une petite chose, pourquoi tu met :
objUser.Put "userAccountControl", 65536
ça correspond à quelle parametre?

merci


-----Message d'origine-----
crois moi ou pas, mais chez moi, la combinaison des deux
fonctionne.


y'a pas un problème d'espace qui serait pas passé par
mail?


--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter
a écrit dans le
message de news:

058e01c50e90$196d4c40$
Voila mon script avec ton bout de script:

DIM arrRecord
Const ForReading = 1

Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Dim Nom, Prenom, CodeUtilisateur
Dim NomScript, userActCtrl

Nom="AA": Prenom="AAAAAA": CodeUtilisateur="AA_AAAAAA"
NomScript="mon_script.bat"

Set Root = GetObject("LDAP://RootDSE")
DomainPath = Root.Get("DefaultNamingContext")
Set Domain = GetObject("LDAP://" & DomainPath)
Set ou_HR = GetObject("LDAP://CN=Users, " & DomainPath)

Set adsUser = ou_HR.Create("user", "CN=" & Nom & " " &
Prenom)

adsUser.Put "sn", Nom
adsUser.Put "GivenName", Prenom
adsUser.Put "Name", Nom & " " & Prenom
adsUser.Put "displayName", Nom & " " & Prenom
adsUser.Put "sAMAccountName", CodeUtilisateur
adsUser.Put "userPrincipalName", CodeUtilisateur
adsUser.Put "scriptPath", NomScript
adsUser.SetInfo
adsUser.SetPassword "0123456"
adsUser.SetInfo

'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### Verouillage du changement de mot de passe
Dim objSD, objDACL, arrTrustees, objACE

Set objSD = adsUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
adsUser.Put "nTSecurityDescriptor", objSD
adsUser.SetInfo

userActCtrl = adsUser.Get("userAccountControl")
userActCtrl = userActCtrl xOr ADS_UF_DONT_EXPIRE_PASSWD
adsUser.Put "userAccountControl", userActCtrl
adsUser.SetInfo

adsUser.AccountDisabled = False
adsUser.SetInfo

Set adsUser = Nothing

-----Message d'origine-----
il faudrait que je vois ton script.

Pour faire simple, voici une version light de mon script
perso de création

et modification user comme ce que tu désire faire, plus
ajout dans une OU

et un groupe spécifiques


'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"

Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### constantes groupe, OU et domaines
'Const Group= "CN=nom_groupe,"
'Const GrOU = "OU=ou_du_groupe,"
'Const OU = "OU=OU_où_creer__l_utilisateur,"
'Const Domain = "DC=domaine"

'#### Création de l'utilisateur

Set objOU = GetObject("LDAP://"& OU & Domain)

Set objUser = objOU.Create("user","cn="&user)
objUser.Put "sAMAccountName",""&user
objUser.Put "UserPrincipalName",""&user
objUser.SetInfo

'### Modification de la date d'expiration du mot de passe
et du changement

de password au logon
objUser.AccountDisabledúlse
objUser.AccountExpirationDate = "01/01/1970"
objUser.Setinfo
objUser.Put "pwdLastSet", -1

'### verouillage du changement de mot de passe

Set objSD = objUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
objUser.Put "nTSecurityDescriptor", objSD
objUser.SetInfo

'### ajout du profil utilisateur et du flag de mot de
passe ne change jamais

objUser.Put "profilePath", "servershare"&user
flags = objUser.Get("UserAccountControl")
objUser.Put "userAccountControl", 65536
objUser.SetInfo

'### ajout à un groupe spécifié en constante
Set objGroup = GetObject("LDAP://"& Group & GrOU &
Domain)


objGroup.Add objUser.ADSPath
objGroup.Setinfo

Msgbox "utilisateur créé avec succès"

--



.




Avatar
Jonathan Bismuth
Bon courage pour la recherche, pour ma part, ça marche correctement sur du
2003, vérifie si pour 2000 on a pas d'autre manip à faire.

objUser.Put "userAccountControl", 65536 : me sert pour gérer les flags qui
m'interessent sur l'utilisateur,

plus d'infos :
http://support.microsoft.com/default.aspx?kbid05144&product=winsvr2003

@+
--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter

"Nico" a écrit dans le message de
news: 05d801c50e96$0d721230$
Ok merci de ton aide, je vais voir pourquoi ça déconne
chez moi.

encore une petite chose, pourquoi tu met :
objUser.Put "userAccountControl", 65536
ça correspond à quelle parametre?

merci


-----Message d'origine-----
crois moi ou pas, mais chez moi, la combinaison des deux
fonctionne.


y'a pas un problème d'espace qui serait pas passé par
mail?


--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter
a écrit dans le
message de news:

058e01c50e90$196d4c40$
Voila mon script avec ton bout de script:

DIM arrRecord
Const ForReading = 1

Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Dim Nom, Prenom, CodeUtilisateur
Dim NomScript, userActCtrl

Nom="AA": Prenom="AAAAAA": CodeUtilisateur="AA_AAAAAA"
NomScript="mon_script.bat"

Set Root = GetObject("LDAP://RootDSE")
DomainPath = Root.Get("DefaultNamingContext")
Set Domain = GetObject("LDAP://" & DomainPath)
Set ou_HR = GetObject("LDAP://CN=Users, " & DomainPath)

Set adsUser = ou_HR.Create("user", "CN=" & Nom & " " &
Prenom)

adsUser.Put "sn", Nom
adsUser.Put "GivenName", Prenom
adsUser.Put "Name", Nom & " " & Prenom
adsUser.Put "displayName", Nom & " " & Prenom
adsUser.Put "sAMAccountName", CodeUtilisateur
adsUser.Put "userPrincipalName", CodeUtilisateur
adsUser.Put "scriptPath", NomScript
adsUser.SetInfo
adsUser.SetPassword "0123456"
adsUser.SetInfo

'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### Verouillage du changement de mot de passe
Dim objSD, objDACL, arrTrustees, objACE

Set objSD = adsUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
adsUser.Put "nTSecurityDescriptor", objSD
adsUser.SetInfo

userActCtrl = adsUser.Get("userAccountControl")
userActCtrl = userActCtrl xOr ADS_UF_DONT_EXPIRE_PASSWD
adsUser.Put "userAccountControl", userActCtrl
adsUser.SetInfo

adsUser.AccountDisabled = False
adsUser.SetInfo

Set adsUser = Nothing

-----Message d'origine-----
il faudrait que je vois ton script.

Pour faire simple, voici une version light de mon script
perso de création

et modification user comme ce que tu désire faire, plus
ajout dans une OU

et un groupe spécifiques


'#### Constantes pasword
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-
00aa0040529b}"

Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100

'### constantes groupe, OU et domaines
'Const Group= "CN=nom_groupe,"
'Const GrOU = "OU=ou_du_groupe,"
'Const OU = "OU=OU_où_creer__l_utilisateur,"
'Const Domain = "DC=domaine"

'#### Création de l'utilisateur

Set objOU = GetObject("LDAP://"& OU & Domain)

Set objUser = objOU.Create("user","cn="&user)
objUser.Put "sAMAccountName",""&user
objUser.Put "UserPrincipalName",""&user
objUser.SetInfo

'### Modification de la date d'expiration du mot de passe
et du changement

de password au logon
objUser.AccountDisabledúlse
objUser.AccountExpirationDate = "01/01/1970"
objUser.Setinfo
objUser.Put "pwdLastSet", -1

'### verouillage du changement de mot de passe

Set objSD = objUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authorityself", "EVERYONE")

For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next

objSD.DiscretionaryAcl = objDACL
objUser.Put "nTSecurityDescriptor", objSD
objUser.SetInfo

'### ajout du profil utilisateur et du flag de mot de
passe ne change jamais

objUser.Put "profilePath", "servershare"&user
flags = objUser.Get("UserAccountControl")
objUser.Put "userAccountControl", 65536
objUser.SetInfo

'### ajout à un groupe spécifié en constante
Set objGroup = GetObject("LDAP://"& Group & GrOU &
Domain)


objGroup.Add objUser.ADSPath
objGroup.Setinfo

Msgbox "utilisateur créé avec succès"

--



.




Avatar
Nico
A première vu cela viendrait du fait que je n'ai pas
ADsSecurity.dll d'installer sur la machine. Enfin je pense
car en faisant pas mal de recherche, j'ai vu qu'il faisait
souvent référence à cette dll.

-----Message d'origine-----
Bon courage pour la recherche, pour ma part, ça marche
correctement sur du

2003, vérifie si pour 2000 on a pas d'autre manip à faire.

objUser.Put "userAccountControl", 65536 : me sert pour
gérer les flags qui

m'interessent sur l'utilisateur,

plus d'infos :
http://support.microsoft.com/default.aspx?
kbid05144&product=winsvr2003


@+
--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter



Avatar
Jonathan Bismuth
peut être oui,

car effectivement, il ne vient pas directement avec 2000, il faut installer
le SDK ADSI

d'autres sites le proposent directement, mais je ne sais pas si c'est légal,
merci de supprimer ce poste s'il n'a pas lieu d'être

http://dev.coadmin.dk/Resources/ADSI%20SDK%205%20HTML/rtk.htm#adssecurity

A nôter qu eje suis sur du 2003, ne dispose pas de la DLL sur le serveur et
que celà fonctonne quand même (nouvelle dll en 2003?)

--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter
"Nico" a écrit dans le message de
news: 06fe01c50ebb$82173780$
A première vu cela viendrait du fait que je n'ai pas
ADsSecurity.dll d'installer sur la machine. Enfin je pense
car en faisant pas mal de recherche, j'ai vu qu'il faisait
souvent référence à cette dll.

-----Message d'origine-----
Bon courage pour la recherche, pour ma part, ça marche
correctement sur du

2003, vérifie si pour 2000 on a pas d'autre manip à faire.

objUser.Put "userAccountControl", 65536 : me sert pour
gérer les flags qui

m'interessent sur l'utilisateur,

plus d'infos :
http://support.microsoft.com/default.aspx?
kbid05144&product=winsvr2003


@+
--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter



Avatar
Nico
Après quelque test, je me suis aperçu qu'effectivement ec
là ne venait pas de cette dll :-(
J'ai repris ma recherche sur internet et j'ai trouvé ceci:

"Note The following code example only works for domains
where the primary language is English, because
the "Everyone" and "NT AUTHORITYSELF" strings are
localized based on the language of the first domain
controller in the domain. There is no way in Visual Basic
to obtain the account names for a well-known security
principal without calling the LookupAccountSid function.
If using Visual Basic, it is suggested that you use the
WinNT provider to determine the User Cannot Change
Password Permission as shown in Reading User Cannot Change
Password (WinNT Provider)." (trouver à cette @:
http://msdn.microsoft.com/library/default.asp?
url=/library/en-
us/adsi/adsi/reading_user_cannot_change_password_ldap_provi
der.asp)

Donc dans mon script si je remplace "everyone" par "tout
le monde", je n'ai plus le message d'erreur. Par contre je
ne sais pas par quoi remplacer NT AUTHORITYSELF.


-----Message d'origine-----
peut être oui,

car effectivement, il ne vient pas directement avec 2000,
il faut installer

le SDK ADSI

d'autres sites le proposent directement, mais je ne sais
pas si c'est légal,

merci de supprimer ce poste s'il n'a pas lieu d'être

http://dev.coadmin.dk/Resources/ADSI%20SDK%205%
20HTML/rtk.htm#adssecurity


A nôter qu eje suis sur du 2003, ne dispose pas de la DLL
sur le serveur et

que celà fonctonne quand même (nouvelle dll en 2003?)

--

Jonathan BISMUTH
MCSE (W2K) 2272252
Beta ID 570978
WSH/Batch Scripter
http://www.supinfo-projects.com/fr/authors/?a=Cyber_Hunter


1 2