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

Plus d'informations
il y a 3 mois 1 semaine - il y a 3 mois 1 semaine #31304 par witness57

Une condition if vérifie si le login nouvellement généré à la ligne 1 ($SAM) est déjà présent dans la source (AD_SAM).
Si non : ça passe directement à la ligne 12, à savoir, formatage du login créé à la ligne 1.
Si oui : Une boucle for vérifie si  "login1" existe, puis "login2"; etc.., la boucle est traitée tant que la condition est true. Dès qu'un login ($SAM + $i) n'est pas trouvé, la condition est false, on passe à la ligne 8
Ligne 8 on stock dans $SAM le compteur avec son incrémentation (qui n'existe pas dans l'AD)
Ligne 10 on ajoute à la source AD le nouvelle utilisateur qui va être créée

Ligne 12, 13 remise en forme (de nouveau) du compte utilisateur








 



Merci je comprends mieux.
Je viens de constater que d'utiliser le signe + pour ajouter la valeur d'une variable à une autre variable qui ne contient qu'une valeur, ça concatène automatiquement à droite. Par contre, si il y a plusieurs valeurs, l'ajout se fait à la suite verticalement.

$sam = "Albert"  
$i = 1
$sam = $sam + $i
$sam
Albert1


$sam = "Albert","Isaac"
$i = 1                 
$sam = $sam + $i       
$sam                   
Albert
Isaac
1
 
Dernière édition: il y a 3 mois 1 semaine par witness57.

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

Plus d'informations
il y a 3 mois 1 semaine #31305 par witness57

Une condition if vérifie si le login nouvellement généré à la ligne 1 ($SAM) est déjà présent dans la source (AD_SAM).
Si non : ça passe directement à la ligne 12, à savoir, formatage du login créé à la ligne 1.
Si oui : Une boucle for vérifie si  "login1" existe, puis "login2"; etc.., la boucle est traitée tant que la condition est true. Dès qu'un login ($SAM + $i) n'est pas trouvé, la condition est false, on passe à la ligne 8
Ligne 8 on stock dans $SAM le compteur avec son incrémentation (qui n'existe pas dans l'AD)
Ligne 10 on ajoute à la source AD le nouvelle utilisateur qui va être créée

Ligne 12, 13 remise en forme (de nouveau) du compte utilisateur
 



Ligne 8 on stock dans $SAM le compteur avec son incrémentation (qui n'existe pas dans l'AD)

Qu'entends-tu par compteur ?

Ligne 10 on ajoute à la source AD le nouvelle utilisateur qui va être créée

Tu veux dire qu'on ajoute le nouveau login à la liste des logins se trouvant dans l'import de départ ?

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

Plus d'informations
il y a 3 mois 1 semaine - il y a 3 mois 1 semaine #31306 par witness57

En complément, je t'avais proposé des modifications que tu n'a pas intégrés. Notamment pour éviter un doublon potentiel post formatage (remplacement des diacritiques)

www.powershell-scripting.com/index.php/f...rt-ad?start=54#31188

Tu ne peux pas te permettre de vérifier si il existe un doublon (l'incrémenter si besoin) puis le modifier, ce n'est pas logique



La dernière version de mon script est la suivante pour l'instant:


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).ToUpper() -replace '[ ]+',' '
$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()


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))
$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" -Encoding "UTF8" -Append -NoTypeInformation -Delimiter ";"


J'ai enlevé la fonction de suppression des diacritics pour $Sn et $Givenname.
J'ai juste laissé la suppression éventuelle d'espaces contigus par un regex pour $Sn, il arrive parfois que les secrétaires mettent deux ou trois espaces par erreur pour les noms composés.
On a donc plus de doublon à ce niveau pour les diacritics.
La fonction est seulement appelée au moment de la création de $SAM dans le script.

Mais ça ne règle pas le problème dont tu fais mention:

"Tu ne peux pas te permettre de vérifier si il existe un doublon (l'incrémenter si besoin) puis le modifier, ce n'est pas logique

Du coup je vais regarder la version que tu m'as proposé"
Dernière édition: il y a 3 mois 1 semaine par witness57.

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

Plus d'informations
il y a 3 mois 1 semaine - il y a 3 mois 1 semaine #31307 par witness57
Dans ce bloc : 


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))
$SAM = Remove-DiacriticsAndSpaces -inputString $SAM

peux-tu m'expliquer pourquoi tu as placé deux accolades ouverte fermée sans rien dedans, dans la boucle for:


for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
{
}
$SAM = $SAM + $i



Merci
Dernière édition: il y a 3 mois 1 semaine par witness57.

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

Plus d'informations
il y a 3 mois 1 semaine - il y a 3 mois 1 semaine #31308 par ericlm128

Qu'entends-tu par compteur ?

L'incrémentation $i

Tu veux dire qu'on ajoute le nouveau login à la liste des logins se trouvant dans l'import de départ ?

Oui

peux-tu m'expliquer pourquoi tu as placé deux accolades ouverte fermée sans rien dedans, dans la boucle for

Parce que c'est la structure d'une boucle for

Merci je comprends mieux.
Je viens de constater que d'utiliser le signe + pour ajouter la valeur d'une variable à une autre variable qui ne contient qu'une valeur, ça concatène automatiquement à droite. Par contre, si il y a plusieurs valeurs, l'ajout se fait à la suite verticalement.

Cela dépend du type
docs.microsoft.com/fr-fr/powershell/modu...by-addition-operator
Dernière édition: il y a 3 mois 1 semaine par ericlm128.
Les utilisateur(s) suivant ont remercié: witness57

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

Plus d'informations
il y a 3 mois 6 jours #31312 par witness57
Merci pour tes réponses.

Du coup, ce bloc-ci:
$SAM = $SAM -replace '[^a-z A-Z 0-9]+','' -replace '[ ]',''
    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; ; $i++)
        {
            $SAMtmp = $SAM.SubString(0, [Math]::Min(19 - $i.ToString().Length, $SAM.length)) + $i.ToString()

            if ($AD_SAM -notcontains $SAMtmp)
            {
                $SAM = $SAMtmp
                break
            }
        }
    }
    $AD_SAM += $SAM

devrait remplacer celui-ci:
$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))
$SAM = Remove-DiacriticsAndSpaces -inputString $SAM

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

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