Question
Amélioration script import AD
- witness
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 120
- Remerciements reçus 1
il y a 9 mois 3 jours #32911
par witness
Amélioration script import AD a été créé par witness
Salut tout le monde.
Bonnes fêtes à tous.
Je reviens avec mon script d'import dans l'AD :
Il fonctionne très bien pour l'import mais il se limite à créer des comptes.
J'aimerais donc l'améliorer afin qu'il tienne compte des utilisateurs à créer, modifier et supprimer.
Si identifiant_CSV / identifiant_AD = modification du champ description
Siidentifiant_CSV / identifiant_AD = Suppression du compte
Si identifiant_CSV /identifiant_AD = Création du compte
J'ai pensé à l'identifiant pour la comparaison entre CSV et AD car il est unique pour chaque utilisateur, il est dans le csv source et il est présent dans le displayname de l'AD (valeur entre crochet) :
En première approche, pour le script, je vois la chose comme ça :
Pour chaque utilisateur dans l'AD
If (la valeur displayname contient entre crochets une valeur identifiant présent dans le csv)
{
Remplacer le champ description de l'utilisateur par la valeur du champ description du csv
}
Elseif (le displayname ne contient pas entre crochets un identifiant présent dans le csv)
{
Supprimer l'utilisateur
}
Else
{
Création de l'utilisateur (en reprenant le bloc existant dans le script actuel)
}
Qu'en pensent les experts ?
Merci
Bonnes fêtes à tous.
Je reviens avec mon script d'import dans l'AD :
#Fonction permettant de remplacer les caractères diacritics
function Remove-DiacriticsAndSpaces
{
Param(
[String]$inputString
)
#Remplace les diacritics
$sb = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($inputString))
#Supprime les espaces et tout ce que la fonction ci-dessus a pu manquer
return($sb -replace '[^a-z0-9]','')
}
#Fichier d'import (doit être au format UTF8)
$users = import-csv -path "C:\Users\admin\Desktop\Import AD users.csv" -delimiter ";"
$AD_SAM = get-ADuser -filter * -SearchBase "DC=mondomaine,DC=mondomaine,DC=com" | Select-Object -ExpandProperty SamAccountName
$NewUsers = $users | ForEach-Object {
$sn = ($_.Nom).ToUpper() -replace '[ ]+',' '
$givenname = $_.Prenom
$Classe = $_.Classe
$identifiant = $_.identifiant
$ou = "OU=Eleves,DC=mondomaine,DC=mondomaine,DC=com"
$description = 'GCU-ORG$ELEVE$' + $Classe
$SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
$SAM = Remove-DiacriticsAndSpaces -inputString $SAM
$SAM = $SAM.SubString(0, [Math]::Min(19, $SAM.length))
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
$CN = $sn + " " + $givenname + " " + "[$identifiant]"
$displayName = $CN
$UPN = $SAM + "@mondomaine.com"
$userAccountControl = 66050
$CannotChangePassword = 1
$HomeDrive = "U"
$HomeDirectory = "\\test\test"
$ProfilePath = "\\server-data\Profils_Eleves\%profil%"
$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
Classe = $Classe
Login = $SAM
Mot_de_passe = $Password
}
}
#Fichier d'export (doit être au format UTF8)
$NewUsers | Export-Csv -path "C:\Users\admin\Desktop\Export eleves.csv" -Encoding UTF8 -Append -NoTypeInformation -Delimiter ";"
Il fonctionne très bien pour l'import mais il se limite à créer des comptes.
J'aimerais donc l'améliorer afin qu'il tienne compte des utilisateurs à créer, modifier et supprimer.
Si identifiant_CSV / identifiant_AD = modification du champ description
Si
Si identifiant_CSV /
J'ai pensé à l'identifiant pour la comparaison entre CSV et AD car il est unique pour chaque utilisateur, il est dans le csv source et il est présent dans le displayname de l'AD (valeur entre crochet) :
$CN = $sn + " " + $givenname + " " + "[$identifiant]"
$displayName = $CN
En première approche, pour le script, je vois la chose comme ça :
Pour chaque utilisateur dans l'AD
If (la valeur displayname contient entre crochets une valeur identifiant présent dans le csv)
{
Remplacer le champ description de l'utilisateur par la valeur du champ description du csv
}
Elseif (le displayname ne contient pas entre crochets un identifiant présent dans le csv)
{
Supprimer l'utilisateur
}
Else
{
Création de l'utilisateur (en reprenant le bloc existant dans le script actuel)
}
Qu'en pensent les experts ?
Merci

Connexion ou Créer un compte pour participer à la conversation.
- rhiwotar
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 96
- Remerciements reçus 1
il y a 9 mois 2 jours #32916
par rhiwotar
Réponse de rhiwotar sur le sujet Amélioration script import AD
Bonjour,
Dans l'idée, ça parait cohérant, à voir la pratique.
Je te propose quand même une petite idée, ou plutôt un garde fou, fait un export des élèves que tu modifies/supprimes, ça te permet de garder une trace et de pouvoir le recréer rapidement à l'identique s'il y a erreur humaine dans le CSV.
Dans l'idée, ça parait cohérant, à voir la pratique.
Je te propose quand même une petite idée, ou plutôt un garde fou, fait un export des élèves que tu modifies/supprimes, ça te permet de garder une trace et de pouvoir le recréer rapidement à l'identique s'il y a erreur humaine dans le CSV.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6298
- Remerciements reçus 68
il y a 9 mois 1 jour - il y a 9 mois 1 jour #32920
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Amélioration script import AD
Salut,
Compare-Object peut déterminer les 3 cas que tu cherches à traiter, de plus il ajoute un membre sur l'objet, utile avec l'instruction Switch.
[Edit]
Sous réserve que tu disposes de deux collections. Si, pour chaque personne, tu compares directement dans l'AD, Compare-Object ne sera pas adapté.
Compare-Object peut déterminer les 3 cas que tu cherches à traiter, de plus il ajoute un membre sur l'objet, utile avec l'instruction Switch.
[Edit]
Sous réserve que tu disposes de deux collections. Si, pour chaque personne, tu compares directement dans l'AD, Compare-Object ne sera pas adapté.
Tutoriels PowerShell
Dernière édition: il y a 9 mois 1 jour par Laurent Dardenne.
Connexion ou Créer un compte pour participer à la conversation.
- witness
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 120
- Remerciements reçus 1
il y a 9 mois 10 heures #32921
par witness
Réponse de witness sur le sujet Amélioration script import AD
Bonjour,
Ça peut être utile oui.
Merci.
Ça peut être utile oui.
Merci.
Connexion ou Créer un compte pour participer à la conversation.
- witness
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 120
- Remerciements reçus 1
il y a 9 mois 9 heures #32922
par witness
Réponse de witness sur le sujet Amélioration script import AD
Salut,
En effet, j'ai pensé après coup à cette commande pour arriver à mon but mais je n'ai pas encore travaillé mon script.
Je reviendrai avec un script plus avancé.
Merci pour le conseil
En effet, j'ai pensé après coup à cette commande pour arriver à mon but mais je n'ai pas encore travaillé mon script.
Je reviendrai avec un script plus avancé.
Merci pour le conseil

Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.052 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Amélioration script import AD