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

Plus d'informations
il y a 1 an 1 mois #31280 par ericlm128
Tu as du bugé car chez moi voici l'export :
"Nom";"Prenom";"OU";"Description";"Login";"Lettre_lecteur";"Dossier_personnel";"Chemin_profil";"ScriptLogon";"Mot_de_passe"
"LOUIS";"Virgile";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$102";"vlouis";"U";"\\test\test";"C:\users";"test";"2123774A"
"LOUIS";"Victor";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$102";"vlouis1";"U";"\\test\test";"C:\users";"test";"7873244I"
"PETIT";"Lisa";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$104";"lpetit";"U";"\\test\test";"C:\users";"test";"8767888K"
"PETIT";"Lou";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$502";"lpetit1";"U";"\\test\test";"C:\users";"test";"4377797R"
"DUPOND";"Assia";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$309";"adupond";"U";"\\test\test";"C:\users";"test";"6276278S"
"DUPOND";"Ambrine";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$610";"adupond1";"U";"\\test\test";"C:\users";"test";"4567718C"
"LOUIS";"Virgile";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$102";"vlouis2";"U";"\\test\test";"C:\users";"test";"8891741K"
"LOUIS";"Victor";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$102";"vlouis3";"U";"\\test\test";"C:\users";"test";"3984544M"
"PETIT";"Lisa";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$104";"lpetit2";"U";"\\test\test";"C:\users";"test";"8492392N"
"PETIT";"Lou";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$502";"lpetit3";"U";"\\test\test";"C:\users";"test";"2649835L"
"Petit";"Jean";"OU=importusers,DC=indp57,DC=local";"GCU-ORG{$ELEVE}$900,9874";"jpetit";"U";"\\test\test";"C:\users";"test";"1778537A"

 
Les utilisateur(s) suivant ont remercié: witness57

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

Plus d'informations
il y a 1 an 1 mois - il y a 1 an 1 mois #31281 par witness57
Tu as repris exactement le script ci-dessous ?


function Remove-DiacriticsAndSpaces
{
    Param(
        [String]$inputString
    )
    #replace diacritics
    $sb = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($inputString))
    #remove spaces and anything the above function may have missed
    return($sb -replace '[^a-z0-9]', '')
}

$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"
$AD_SAM = get-ADuser -filter * -SearchBase "DC=Mondomaine,DC=local" | Select-Object -ExpandProperty SamAccountName
$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $sn = Remove-DiacriticsAndSpaces -inputString $sn
    $givenname = $_.Prenom
    $givenname = Remove-DiacriticsAndSpaces -inputString $givenname
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=Mondomaine,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    
    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
        {
        }
        $SAM = $SAM + $i
    }
    $AD_SAM += $SAM
    
    $SAM = $SAM.SubString(0, [Math]::Min(19, $SAM.length)) -replace '[ ]',''
    $SAM = Remove-DiacriticsAndSpaces -inputString $SAM

    $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 ";"



J'ai enlevé le
-replace '[^a-z0-9]+',''

qui se trouvait derrière $sn et $givenname et pour le $Sam aussi, car ce traitement est déjà présent dans la fonction.
Dernière édition: il y a 1 an 1 mois par witness57.

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

Plus d'informations
il y a 1 an 1 mois - il y a 1 an 1 mois #31283 par witness57
C'est bon j'ai trouvé,

En fait, j'ai dû modifier le nom de deux variables.

J'avais ça avant que je trouve:


$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $sn = Remove-DiacriticsAndSpaces -inputString $sn
    $givenname = $_.Prenom
    $givenname = Remove-DiacriticsAndSpaces -inputString $givenname


et j'ai remplacé comme ça:


$NewUsers = $users | ForEach-Object {
$Nom = $_.Nom
$sn = Remove-DiacriticsAndSpaces -inputString $Nom
$Prenom = $_.Prenom
$givenname = Remove-DiacriticsAndSpaces -inputString $Prenom



Est-ce un problème normal ?
Je ne sais pas bien pourquoi cela pose problème, il ne me semble pas qu'une variable qui fasse appel à elle-même soit un problème ?
 
Dernière édition: il y a 1 an 1 mois par witness57.

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

Plus d'informations
il y a 1 an 1 mois #31284 par witness57
Bon, je viens de tester un import de 2300 users et je n'ai rencontré aucun problème.
Visiblement le script fonctionne parfaitement.
Merci beaucoup aux contributeurs.

Je vais pouvoir faire mon import de début d'année.

L'étape suivante consistera à faire en sorte que le script trie les utilisateurs en fonction du fichier d'import afin de supprimer les sortants, d'ajouter les entrants et de modifier les existants.

Mais j'ai le temps pour ça, une année.

Merci beaucoup encore.

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

Plus d'informations
il y a 1 an 1 mois #31285 par ericlm128

C'est bon j'ai trouvé,
En fait, j'ai dû modifier le nom de deux variables.
Est-ce un problème normal ?


Non ce n'est pas normal.
Ce n'est pas ça le problème, je pense que tu as du bugué

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

Plus d'informations
il y a 1 an 1 mois #31286 par ericlm128
Voici ton script modifié que j'ai utilisé pour tester
function Remove-DiacriticsAndSpaces
{
    Param(
        [String]$inputString
    )
    #replace diacritics
    $sb = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($inputString))
    #remove spaces and anything the above function may have missed
    return($sb -replace '[^a-z0-9]', '')
}

$users = import-csv -path "importusers.csv" -delimiter ";"

$AD_SAM =  @()#get-ADuser -filter * -SearchBase "DC=indp57,DC=local" | Select-Object -ExpandProperty SamAccountName

$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $sn = Remove-DiacriticsAndSpaces -inputString $sn
    $givenname = $_.Prenom
    $givenname = Remove-DiacriticsAndSpaces -inputString $givenname
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=indp57,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    
    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
        {
        }
        $SAM = $SAM + $i
    }
    $AD_SAM += $SAM
    
    $SAM = $SAM.SubString(0, [Math]::Min(19, $SAM.length)) -replace '[ ]',''
    $SAM = Remove-DiacriticsAndSpaces -inputString $SAM

    $CN = $sn + " " + $givenname + " " + "[$identifiant]"
    $displayName = $CN
    $UPN = $SAM + "@indp57.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 "export.csv" -Append -NoTypeInformation -Delimiter ";"

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

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