Script Powershell – Création d’utilisateur Active Directory depuis un fichier CSV


Présentation


Hey, Scripting Guy ! Dernièrement un ami m’a demandé de lui faire un petit script de création de comptes utilisateurs AD à l’aide d’un import CSV. Je l’ai modifié et l’ai généralisé pour pouvoir le partager avec vous !
Ce script permet la création d’utilisateur en prenant en compte les options suivantes :

  • Nom de l’utilisateur
  • Prénom de l’utilisateur
  • Nom de connexion
  • Adresse Mail
  • Service
  • Ajout au Groupe Global
  • Mot de passe temporaire
  • Placement dans OU

Mise en place


Prérequis :

  • Avoir une arborescence compatible avec le script (vous pourrez l’adapter à vos besoins)
  • Un fichier CSV conforme au modèle suivant :
    1
    2
    prenom,nom,login,service
    Gauthier,Millour,gmillour,SI
  • Pour l’exemple, mon de domaine AD est gmillour.lab

Nous allons maintenant voir le script en détail. Vous pourrez retrouver la version finale à la fin de cet article.

Étape 1 : Importation du module et déclaration des variables

1
2
3
4
5
6
7
8
# Import des modules necéssaires
Import-Module ActiveDirectory
# Variables
$domain = Read-Host "Entrez votre nom de domaine AD (ex: Si votre domaine est 'example.lab', entrez seulement 'example') "
$domainUPN = Read-Host "Entrez l' UPN de votre domaine (ex: Si votre domaine est 'example.lab', entrez seulement 'lab') "
$maildomain = Read-Host "Entrez votre nom de domaine publique (ex: Si votre domaine est 'example.fr', entrez seulement 'example') (laissez vide si identique à votre nom de domaine AD) "
$mailtld = Read-Host "Entrez le TLD de votre domaine (ex: Si votre domaine est 'example.fr', entrez seulement 'fr') (laissez vide si identique à votre nom de domaine AD) "
$csvfile = Read-Host "Entrez le nom de votre fichier CSV (avec son extension ; ex: users.csv) "

Étape 2 : Gestion du domaine de mail
Ici je vous facilite un peu la vie. Si au renseignement du domaine mail vous avez laisser un vide, je prends le domaine Active Directory (en général il faut éviter d’avoir un nom de domaine Active Directory identique au nom de domaine publique utilisé pour les mails, mais dans beaucoup d’entreprise il est identique)

1
2
3
4
5
6
7
If (!$maildomain) {
    $maildomain = $domain
}

If (!$mailtld) {
    $mailtld = $domainUPN
}

Étape 3 : Import du fichier CSV et définition des nouvelles variables
Nous allons maintenant interpréter le fichier csv contenant les noms d’utilisateur, et créer un nouveau fichier CSV temporaire prenant en charge les accents.

1
Get-Content -Path ./$csvfile | Out-File -FilePath ./temp-aduser.csv -Encoding unicode

Puis on importe les données et on créé les nouvelles variables :

1
2
3
4
5
6
7
8
9
10
11
12
13
Import-Csv -Delimiter "," -Path .\temp-aduser.csv | ForEach-Object {
$name = $_.prenom
$surname = $_.nom
$login = $_.login
$department = $_.service
$mail = ($name + "." + $surname + "@" + $maildomain + "." + $mailtld)
$group = ("GG_" + $department)
$displayname = "$name $surname"
$targetOU = "OU=$department,OU=Utilisateurs,OU=$domain,DC=$domain,DC=$domainUPN"

...

}

Étape 4 : Contrôle d’existence et création de l’objet
Après avoir créé les variables, on s’assure que les objets AD que nous allons créer n’existent pas. Dans le cas contraire l’utilisateur ne sera pas créé et le script passera à la ligne suivante :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Import-Csv -Delimiter "," -Path .\temp-aduser.csv | ForEach-Object {

...

try {
    $validUSER = [adsi]::Exists("LDAP://CN=$displayname,OU=$department,OU=Utilisateurs,OU=$domain,DC=$domain,DC=$domainUPN")
}

catch {
    Throw ("True")
}

If (!$validUSER) {
    New-ADUser -Name $displayname -GivenName $name -Surname $surname -DisplayName $displayname -SamAccountName $login -UserPrincipalName ($login + "@" + $domain + "." + $domainUPN) -Path $targetOU -AccountPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -force) -EmailAddress $mail -ChangePasswordAtLogon $true -Enabled $true
    $GetGroup = Get-ADGroup -Identity "CN=$group,OU=$department,OU=Utilisateurs,OU=$domain,DC=$domain,DC=$domainUPN"
    Add-ADGroupMember -Identity $GetGroup -Members $login
    Write-Host "Création de $displayname : Prénom=$name Nom=$surname Mail=$mail Login=$login Fichier source=$csvfile OU de destination= $targetOU Domaine=$domain.$domainUPN"
}
Else {
    Write-Host "L'utilisateur $displayname existe déjà : LDAP://CN=$displayname,OU=$department,OU=Utilisateurs,OU=$domain,DC=$domain,DC=$domainUPN" -ForegroundColor Red
}
}

Étape 5 : Fin de script
Et voilà ! Votre script est prêt ! On n’oublie pas de supprimer le fichier CSV temporaire et on peut ajouter la commande pause pour vous laisser le temps de lire ce que le script a créé ou non.

1
2
Remove-Item -Path .\temp-aduser.csv
pause

BONUS 1 : Profil itinérant
Dans le cas où vous utilisez des profils itinérants et que vous souhaiteriez importer vos utilisateurs en configurant automatiquement cette option, vous devrez ajouter la variable suivante :

1
$profile = "\\CheminUNC\Profile_Redirection\$login"

Et ajouter l’option suivante à la commande « New-ADUser »

1
-ProfilePath $profile

Version finale :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# (C) Gauthier Millour
#
# Création d'utilisateur Active Directory depuis un fichier .CSV
#
#
# Début de script
#
#
# Import des modules necéssaires
Import-Module ActiveDirectory
#
#
# Message de lancement
Write-Host `
" _____________________________________
|                                     |
|  Script Création d'utilisateur AD   |
|      depuis un fichier .csv         |
|                                     |
| (c) Gauthier Millour                |
|                                     |
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯"
`
-ForegroundColor Yellow
#
#
# Avertissements
Write-Host "Assurez-vous de bien lancer le script depuis votre contrôleur de domaine.
Attention, le fichier .csv doit être au même emplacement que votre script. "
-ForegroundColor Red
#
#
# Variables
$domain = Read-Host "Entrez votre nom de domaine AD (ex: Si votre domaine est 'example.lab', entrez seulement 'example') "
$domainUPN = Read-Host "Entrez l' UPN de votre domaine (ex: Si votre domaine est 'example.lab', entrez seulement 'lab') "
$maildomain = Read-Host "Entrez votre nom de domaine publique (ex: Si votre domaine est 'example.fr', entrez seulement 'example') (laissez vide si identiqueà votre nom de domaine AD) "
$mailtld = Read-Host "Entrez le TLD de votre domaine (ex: Si votre domaine est 'example.fr', entrez seulement 'fr') (laissez vide si identiqueà votre nom de domaine AD) "
$csvfile = Read-Host "Entrez le nom de votre fichier CSV (avec son extension ; ex: users.csv) "

If (!$maildomain) {
    $maildomain = $domain
}

If (!$mailtld) {
    $mailtld = $domainUPN
}

# Gestion des accents et import du fichier csv
Get-Content -Path ./$csvfile | Out-File -FilePath ./temp-aduser.csv -Encoding unicode
Import-Csv -Delimiter "," -Path .\temp-aduser.csv | ForEach-Object {
$name = $_.prenom
$surname = $_.nom
$login = $_.login
$department = $_.service
$mail = ($name + "." + $surname + "@" + $maildomain + "." + $mailtld)
$group = ("GG_" + $department)
$displayname = "$name $surname"
$targetOU = "OU=$department,OU=Utilisateurs,OU=$domain,DC=$domain,DC=$domainUPN"

try {
    $validUSER = [adsi]::Exists("LDAP://CN=$displayname,OU=$department,OU=Utilisateurs,OU=$domain,DC=$domain,DC=$domainUPN")
}

catch {
    Throw ("True")
}

If (!$validUSER) {
    New-ADUser -Name $displayname -GivenName $name -Surname $surname -DisplayName $displayname -SamAccountName $login -UserPrincipalName ($login + "@" + $domain + "." + $domainUPN) -Path $targetOU -AccountPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -force) -EmailAddress $mail -ChangePasswordAtLogon $true -Enabled $true
    $GetGroup = Get-ADGroup -Identity "CN=$group,OU=$department,OU=Utilisateurs,OU=$domain,DC=$domain,DC=$domainUPN"
    Add-ADGroupMember -Identity $GetGroup -Members $login
    Write-Host "Création de $displayname : Prénom=$name Nom=$surname Mail=$mail Login=$login Fichier source=$csvfile OU de destination= $targetOU Domaine=$domain.$domainUPN"
}
Else {
    Write-Host "L'utilisateur $displayname existe déjà : LDAP://CN=$displayname,OU=$department,OU=Utilisateurs,OU=$domain,DC=$domain,DC=$domainUPN" -ForegroundColor Red
}

Remove-Item -Path .\temp-aduser.csv

pause

N’oubliez pas de le signer 😉

Enjoy ! 🙂