Question
Doublons générés lors du traitement import AD
- witness
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 120
- Remerciements reçus 1
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
Connexion ou Créer un compte pour participer à la conversation.
- witness
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 120
- Remerciements reçus 1
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.
- witness
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 120
- Remerciements reçus 1
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é"
Connexion ou Créer un compte pour participer à la conversation.
- witness
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 120
- Remerciements reçus 1
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
Connexion ou Créer un compte pour participer à la conversation.
- ericlm128
- Hors Ligne
- Membre elite
-
- Messages : 169
- Remerciements reçus 35
L'incrémentation $iQu'entends-tu par compteur ?
OuiTu veux dire qu'on ajoute le nouveau login à la liste des logins se trouvant dans l'import de départ ?
Parce que c'est la structure d'une boucle forpeux-tu m'expliquer pourquoi tu as placé deux accolades ouverte fermée sans rien dedans, dans la boucle for
Cela dépend du typeMerci 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.
docs.microsoft.com/fr-fr/powershell/modu...by-addition-operator
Connexion ou Créer un compte pour participer à la conversation.
- witness
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 120
- Remerciements reçus 1
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.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Doublons générés lors du traitement import AD