Page 1 sur 1
[..] Valeur unique
Posté : ven. 21 nov. 2014 15:19
par ludoo
Bonjour à tous ,
pour les besoin d'un script , ajout d'un utilisateur dans un annuaire AD (microsoft)
il faut que le sAMAccountName doit être unique , maximum de caractère 20.
j'utilise 2 imput : prenom et nom
la création du sAMAccountName = nom + 2 première lettre du prénom , si pas unique on rajoute la 3 lettre du prénom ainsi de suite.
j'utilise UDF AD pour effectuer cette manip .
je bloque sur la boucle à utiliser pour rendre ce sAMAccountName unique.
voici un début de script de la fonction:
► Afficher le texte
Code : Tout sélectionner
Func useruniqueAD()
If _AD_ObjectExists($sAMAccountNameUser) Then
MsgBox(64, "Active Directory Functions", "OU '" & $sAMAccountNameUser & "' exists"& @CRLF & "Une création manuelle de l'utilisateur est requise.")
Local $pUserUpper = StringUpper($pUser)
Local $pUserLen = StringLen($pUser)
Local $nUserLen = StringLen($snUserU)
Local $pnUserLen = $pUserLen+$nUserLen
Local $Splitprenom = StringSplit($pUserUpper , "")
If $pnUserLen > 20 Then
MsgBox(64, "Active Directory Functions", "Le nom d'ouverture session en version 2000 dépasse le nombre maximum de caractère autorisé")
Exit
Else
Local $pUserU3 = $spUserU&$Splitprenom[3]
Local $sAMAccountNameUser = $snUserU&$pUserU3
Exit
Else
MsgBox(64, "Active Directory Functions", "OU '" & $sAMAccountNameUser & "' does not exist")
EndIf
;EndIf
EndFunc
merci de votre aide.
Re: [..] valeur unique
Posté : ven. 21 nov. 2014 15:32
par jbnh
Si sAMAccountName = nom + 2 première lettre du prénom
pourquoi faire le check pnUserLen (entièreté du nom et du prénom) > 20 ?
Une petite idée de code sinon
Code : Tout sélectionner
boucle de i = 1 jusqu'a prenom.length
si nom+stringleft(prenom,i) est unique et <20
return true
return false;
Re: [..] Valeur unique
Posté : sam. 22 nov. 2014 22:41
par jguinch
Question à 2 balles (pour rajouter une couche)

:
Comment vas-tu gérer le cas de figure où il y a un homonyme (si tu as 2 "Marc DUPOND" qui travaillent dans l'entreprise) ?
C'est pas pour faire le chiant hein, mais mettre en évidence qu'il y a beaucoup de cas de figure à prendre en compte... (nom de jeune fille/marital + divorce, doublons, départs...).
Re: [..] Valeur unique
Posté : dim. 23 nov. 2014 11:25
par ludoo
oui , c vrai l'enfer des admin ,
d’où une règle de nommage avec nom entier et les 2 première lettres du prénom.
si un user identique , rajoute 3 lettres du prénom , pour les cas particulier création manuel a défaut d'un script automatique.
je bloque sur la boucle , je vois pas comment récupérer les lettres du prénom.
Re: [..] Valeur unique
Posté : dim. 23 nov. 2014 14:11
par TommyDDR
nom + 2 lettres prénom et si doublon -> 1, 2, 3, etc
Re: [..] Valeur unique
Posté : dim. 23 nov. 2014 15:05
par ludoo
pas de problème sur le raisonnement , mais c'est le code que je trouve pas à faire.
Re: [..] Valeur unique
Posté : dim. 23 nov. 2014 20:38
par walkson
Bonsoir,
Une piste...?
En partant du principe que les noms enregistrés sont montés dans un array
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
Local $array[5] = ["BOBROWSKIJASTRZEliA","BOBROWSKIJASTRZEliB","DUPONTjeaA","MARTINlouA","MARTINlouB"]
MsgBox(0,"",unic("Bobrowski Jastrzebiec-Bolescicow","Li "))
MsgBox(0,"",unic("Dupont","Jean"))
MsgBox(0,"",unic("MARTIN","louis"))
Func unic($nom,$prenom)
$nom = StringReplace($nom," ","");supprime espace vide
$long = StringLen($nom)
If $long > 16 Then $nom = StringMid($nom,1,16);16 caracteres maxi
$nom = StringUpper($nom)
$prenom = StringReplace($prenom," ","");supprime espace vide
$prenom = StringMid($prenom,1,3);3 caracteres
$prenom = StringLower($prenom)
ConsoleWrite($nom & $prenom & @CR)
For $i = 65 To 90 ;ASCII Character A à Z
_ArraySearch($array,$nom & $prenom & Chr($i))
If @error Then
$nomUnic = $nom & $prenom & Chr($i)
ExitLoop
EndIf
Next
ConsoleWrite($nomUnic & @CR)
Return $nomUnic
EndFunc
Je limite le nom à 16 caractères + 3 pour le prénom et 1 de reconnaissance (en lettre) = 20 maxi
Re: [..] Valeur unique
Posté : mer. 26 nov. 2014 19:03
par ludoo
merci pour le script, il fonctionne parfaitement.
j’étais parti sur cette base
► Afficher le texte
Code : Tout sélectionner
#comments-start
Local $comptead = "martinlo"
Local $nom = "martin"
Local $prenom = "louis"
Local $npl = "martinlo"
Local $nbsprenom = StringLen($prenom)
ConsoleWrite($nbsprenom &@CRLF)
local $de = StringSplit($prenom, "")
;~ For $display In $de
;~ ConsoleWrite($display &@CRLF)
;~ Next
;~ For $i = 1 To $de[0] ; Loop through the array returned by StringSplit to display the individual values.
;~ MsgBox($MB_SYSTEMMODAL, "", "$aDays[" & $i & "] - " & $de[$i])
;~ Next
For $i = 1 To $de[0] Step 1
Local $user1 = $nom&$de[$i]
ConsoleWrite($user1& @CRLF)
ConsoleWrite($user1&$de[$i] &@CRLF)
Next
j'arrive pas à reconstituer le prénom lettre par lettre après le StringSplit.
Re: [..] Valeur unique
Posté : jeu. 27 nov. 2014 11:16
par walkson
Ceci ?
► Afficher le texte
Code : Tout sélectionner
Local $comptead = "martinlo"
Local $nom = "martin"
Local $prenom = "louis"
Local $npl = "martinlo"
Local $nbsprenom = StringLen($prenom)
ConsoleWrite($nbsprenom &@CRLF)
local $de = StringSplit($prenom, "")
;~ For $display In $de
;~ ConsoleWrite($display &@CRLF)
;~ Next
;~ For $i = 1 To $de[0] ; Loop through the array returned by StringSplit to display the individual values.
;~ MsgBox($MB_SYSTEMMODAL, "", "$aDays[" & $i & "] - " & $de[$i])
;~ Next
Local $user1 = $nom
For $i = 1 To $de[0] Step 1
;Local $user1 = $nom&$de[$i]
;ConsoleWrite($user1& @CRLF)
;ConsoleWrite($user1&$de[$i] &@CRLF)
$user1 &= $de[$i]
Next
ConsoleWrite($user1 &@CRLF)