Question Doublons générés lors du traitement import AD

Plus d'informations
il y a 2 ans 8 mois - il y a 2 ans 8 mois #31066 par witness
Hello,
Je reviens avec mon script d'import des utilisateurs dans AD:

$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"

$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $givenname = $_.Prenom
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=Mondomaine,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    $CN = $sn + " " + $givenname + "[$identifiant]"
    $displayName = $CN
    $UPN = $SAM + "@Mondomaine.local"
    $userAccountControl = 66050
    $CannotChangePassword = 1
    $HomeDrive = "U"
    $HomeDirectory = "\\test\test"
    $ProfilePath = "C:\users"
    $ScriptLogon = "test"
    $Password = '{0}{1}' -f (get-random -Minimum 1000000 -Maximum 9999999), [char](get-random -Minimum 65 -Maximum 90)
    $Password = $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](get-Random -Minimum 65 -Maximum 78)
    $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Enabled = 1


New-ADuser -displayName $displayName -Path $ou -Description $description -SamAccountName $SAM -givenname $givenname -Surname $sn -name $displayName -UserPrincipalName $UPN -PasswordNeverExpires $userAccountControl -CannotChangePassword $CannotChangePassword -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory -ProfilePath $ProfilePath -ScriptPath $ScriptLogon -Enabled $Enabled -Accountpassword $Secure_String_pwd


[PSCustomObject]@{
    Nom = $sn
    Prenom = $givenname
    OU = $ou
    Description= $description
    Login = $SAM
    Lettre_lecteur = $HomeDrive
    Dossier_personnel = $HomeDirectory
    Chemin_profil = $ProfilePath
    ScriptLogon = $ScriptLogon
    Mot_de_passe = $Password
    }
}


$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"


Il fonctionne parfaitement.

Seulement, et il fallait s'en douter, lors de la création en masse, puisque les logins sont composés de la première lettre du prénom + du nom complet, il y a tentative de création de doublons et Active Directory n'aime pas ça.

Du coup, je pense qu'il va falloir que je crée un bloc IF quelque part, afin de lui dire que si, lors du traitement, un login existe déjà, qu'il rajoute un chiffre à la fin.

Seulement la question que je me pose avant de me lancer (j'aurais évidement besoin de votre aide je vous remercie d'avance) c'est de savoir où je dois lui demander de rechercher un doublons.

Dans Active Directory ? Ce qui supposerait que les comptes sont créés au fur et à mesure du traitement du script
Ou bien en mémoire (dans une variable) ? Ce qui supposerait que le résultats du traitement sont chargés en mémoire et appliqués une fois le traitement totalement terminé.

Qu'en pensez vous les experts ?
Merci.
Dernière édition: il y a 2 ans 8 mois par witness.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 8 mois - il y a 2 ans 8 mois #31067 par witness
Pour ma condition, je pensais à un quelque chose du genre:

if ($SAM -eq  Get-ADUser -SearchBase 'OU=importusers,DC=Mondomaine,DC=local' -filter * | Select-Object  SamAccountName)
        {
            $Sam = $Sam + $i++
        }



Mais en fait ça ne fait que m'ajouter un chiffre en plus à chaque traitement, et en plus ça démarre de zéro, ce n'est pas ce que je veux, je voudrais qu'il m'ajoute un 1 à la fin du login en doublon, puis un 2 à la place du 1 si il y a encore le même doublon, etc.…

Je pense être bon au niveau de ma condition mais pas de mon instruction
Dernière édition: il y a 2 ans 8 mois par witness.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 8 mois #31069 par Laurent Dardenne
>>où je dois lui demander de rechercher un doublons ?
Via une exception du cmdlet, enfin si tu peux déterminer ce cas. Je n'ai pas d'AD pour tester.

Et pour déterminer le chiffre à ajouter peut-être retrouver toutes les occurrences des comptes AD commençant par le nom dupliqué et rechercher celui qui a le chiffre le plus élevé puis le placer dans un cache ( une hashtable avec le nom et le dernier indice).
Mais là faut étudier le sujet plus précisément ainsi que la volumétrie. Si ton traitement concerne 10 créations dans une AD de 4000 comptes ou 300 dans un AD de 80.000 comptes.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 8 mois - il y a 2 ans 8 mois #31070 par witness
Laurent,
Je vais m'orienter vers ton conseil et chercher à en savoir plus.
J'ai 2500 comptes à créer, je repars de zéro chaque année pour ces comptes là.
L'AD contient donc 300 comptes persistant dans le temps avec quelques création et suppression de temps en temps mais sans grand changement, je le fais manuellement ça d'ailleurs.
Merci
Dernière édition: il y a 2 ans 8 mois par witness.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 8 mois #31072 par Laurent Dardenne
Analyse de texte -> regex :
'AccountName255' -match '^.*?(?<Nombre>\d*)$'

$matches.Nombre
#255
$Matches

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 8 mois - il y a 2 ans 8 mois #31073 par Laurent Dardenne
Et pour découper/reconstruire
'AccountName255' -match '^(?<Nom>.*?)(?<Nombre>\d*)$'
Il faut une autre construction pour ajouter l'incrémentation, je regarderai ça demain.

Tutoriels PowerShell
Dernière édition: il y a 2 ans 8 mois par Laurent Dardenne. Raison: bug éditeur

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.096 secondes
Propulsé par Kunena