Skip to main content

Script de création des comptes dans un active Directory et ouverture des sessions RDS.

Le script ci-dessous doit être passé avec le chemin d'un fichier csv en argument.

Le contenu du fichier csv sera détaillé après le script.

# Force le type d'execution
Set-ExecutionPolicy Unrestricted

$ErrorActionPreference = "SilentlyContinue"
$host.ui.RawUI.WindowTitle = "Script de création d'utilisateurs dans l'Active Directory"
$host.ui.RawUI.ForegroundColor = 'Green'
$host.ui.RawUI.BackgroundColor = 'Black'

Set-PSDebug -Off

<#
.SYNOPSIS
Script permettant l'inscription des nouveaux utilisateurs dans l'Active Directory.
.DESCRIPTION
Script permettant l'inscription des nouveaux utilisateurs dans l'Active Directory.
.PARAMETER FichierCSV
Chemin complet du fichier .CSV
.EXAMPLE
ActiveDirectoryUsersCreator.ps1 "D:\Users\user\Scripts\Active Directory\fichier.csv"
.INPUTS

.OUTPUTS

.NOTES
Le script suit le processus suivant :
- Analyse du fichier CSV entré en paramètre du script
* Le fichier CSV doit contenir les colonnes suivantes :
+ Nom
+ Prenom
+ NomComplet
+ Utilisateur
+ MotDePasse
+ Groupe (dans lequel sera ajouté l'utilisateur)
+ UniteOrganisation (dans laquelle sera ajouté l'utilisateur)
+ UniteOrganisationRacine (dans laquelle sera ajouté l'Unité Organisationnelle précédente)
+ Domaine (Domaine dans lequel créer l'utilisateur)
+ TLD (TLD du domaine)
+ Serveur (Serveur sur lequel l'utilisateur se connectera)
+ Passerelle (Serveur de passerelle de bureau à distance)
+ Administrateur (Compte administrateur du domaine)
+ AdminPassword (Mot de passe du compte administrateur)
+ ExecutablePath (Chemin de l'exécutable dont on créera le raccourci)
+ Logiciel (Nom du logiciel qui sera donné au raccourci)
- Création du dossier qui recevra les fichiers RDP destinés aux utilisateurs pour se connecter sur le serveur qui leur a été attribué.
- Création de l'Unité Organisationnelle dans laquelle seront inscrits les nouveaux utilisateurs si celle-ci n'existe pas déjà.
- Création du Groupe de sécurité dans lequel seront inscrits les nouveaux utilisateurs si celui-ci n'existe pas déjà.
- Création du compte utilisateur dans l'Unité Organisationnelle.
- Intégration du compte utilisateur dans le groupe dont il dépend.
- Génération du fichier RDP.
- Ouverture de session de l'utilisateur.
- Création du raccourci de l'application sur le bureau de la session.
#>

# Importation du module Active Directory

Import-Module ActiveDirectory

# Prise en compte du fichier CSV dont le chemin est passé en argument

#Param(
#[string]$FichierCSV
#)

$FichierCSV = $args[0]

#### Déclaration des fonctions utilisées dans le script ####

# Fonction permettant une pause jusqu'à l'appui sur une touche

function Pause ($Message="Appuyer sur une touche pour continuer..."){
Write-Host ""
Write-Host -NoNewLine $Message
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Write-Host ""
}

# Fonction utilisée pour la création d'un nouveau raccourci.

Function New-Shortcut{
param(
[parameter(Mandatory=$true)][string]$ShortcutFullName,
[parameter(Mandatory=$true)][string]$ShortcutTarget
)
$ShortcutObject = New-Object -comObject WScript.Shell
$Shortcut = $ShortcutObject.CreateShortcut($ShortcutFullName)
$Shortcut.TargetPath = $ShortcutTarget
$Shortcut.Save()
}

##### Script #####


# Analyse du fichier csv en spécifiant le caractère de séparation.

$UtilisateursCSV = Import-csv -Path $FichierCSV -Delimiter ";"

# Enregistrement des variables issues de l'analyse du fichier CSV passé en argument.

foreach($ligne in $UtilisateursCSV)
{
$Nom = $ligne.Nom
$Prenom = $ligne.Prenom
$NomComplet = $ligne.NomComplet
$NomUtilisateur = $ligne.Utilisateur
$MotDePasse = $ligne.MotDePasse
$Groupe = $ligne.Groupe
$UniteOrganisation = $ligne.UniteOrganisation
$UniteOrganisationRoot = $ligne.UniteOrganisationRacine
$Domaine = $ligne.Domaine
$TLD = $ligne.TLD
$RDSServer = $ligne.Serveur
$Passerelle = $ligne.Passerelle

# Vérification et création du dossier dans lequel seront déposés les fichiers RDP

$RDPDir = "C:\RDP_$Groupe"
If(!(test-path $RDPDir))
{
New-Item -ItemType Directory -Force -Path $RDPDir
}

# Vérification de l'existence de l'OU à créer dans la base Active Directory

$OUExist = Get-ADOrganizationalUnit -LDAPFilter "(Name=_$UniteOrganisation)" | Select-Object Name | Foreach { $_.Name }

if ( "$OUExist" -eq "_$UniteOrganisation" ) {
# Si l’OU existe déjà, afficher un message d’avertissement

Write-Warning "`n L'Unite Organisationnelle _$UniteOrganisation existe deja."

}
else
{
# Si l'OU n'existe pas, création de l'OU

Write-Warning "`n L'Unite Organisationnelle _$UniteOrganisation n'existe pas."
New-ADOrganizationalUnit -Name _$UniteOrganisation -Path "OU=$UniteOrganisationRoot,DC=$Domaine,DC=$TLD"
}

# Vérification de l'existence du groupe à créer dans la base Active Directory

$GroupExist = Get-ADGroup -LDAPFilter "(Name=$Groupe)" | Select-Object Name | Foreach { $_.Name }

if ( "$GroupExist" -eq "$Groupe" ) {
# Si l’utilisateur existe déjà, afficher un message d’avertissement

Write-Warning "`n Le groupe $Groupe existe deja dans l'annuaire."

}
else
{
# Si le groupe n'existe pas, création du groupe.

Write-Warning "`n Le groupe $Groupe n'existe pas dans l'annuaire."
New-ADGroup $Groupe -Path "OU=_$UniteOrganisation,OU=$UniteOrganisationRoot,DC=$Domaine,DC=$TLD" -GroupCategory Security -GroupScope Global -PassThru –Verbose
}

# Vérification de l'existence de l'utilisateur à créer dans la base Active Directory

if (Get-ADUser -F {SamAccountName -eq "$NomUtilisateur"} ) {
# Si l’utilisateur existe déjà, afficher un message d’avertissement

Write-Warning "`n Le compte $NomUtilisateur existe deja dans l'annuaire."

}
else
{
#Création de l'utilisateur

Write-Warning "`n Le compte $NomUtilisateur n'existe pas dans l'annuaire."
New-ADuser `
-Name "$NomComplet" `
-GivenName "$Prenom" `
-Surname "$Nom" `
-SamAccountName "$NomUtilisateur" `
-Path "OU=_$UniteOrganisation,OU=$UniteOrganisationRoot,DC=$Domaine,DC=$TLD" `
-AccountPassword (ConvertTo-SecureString "$MotDePasse" -AsPlainText -force) `
-passThru `
-Enabled $True `
-ChangePasswordAtLogon $False `
-CannotChangePassword $True

#Ajout de l'utilisateur dans le groupe dont il dépend

Add-ADGroupMember -Identity "$Groupe" -Members "$NomUtilisateur"
}

##### Création du fichier RDP. #####

# Vérification de l'existence du fichier rdp.

if ( ( Test-Path "$RDPDir\$NomUtilisateur.rdp" ) -eq $False ) {
# Si le fichier n'existe pas, afficher un message et créer le fichier
Write-Host "`n Le fichier $NomUtilisateur n'existe pas dans le répertoire $RDPDir `n Création du fichier"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "screen mode id:i:2"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "use multimon:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "desktopwidth:i:1920"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "desktopheight:i:1080"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "session bpp:i:16"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "winposstr:s:0,1,-1816,21,-952,777"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "compression:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "keyboardhook:i:2"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "audiocapturemode:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "videoplaybackmode:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "connection type:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "networkautodetect:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "bandwidthautodetect:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "displayconnectionbar:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "enableworkspacereconnect:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "disable wallpaper:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "allow font smoothing:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "allow desktop composition:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "disable full window drag:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "disable menu anims:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "disable themes:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "disable cursor setting:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "bitmapcachepersistenable:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "full address:s:$RDSServer"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "audiomode:i:2"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "redirectprinters:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "redirectcomports:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "redirectsmartcards:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "redirectclipboard:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "redirectposdevices:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "autoreconnection enabled:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "authentication level:i:2"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "prompt for credentials:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "negotiate security layer:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "remoteapplicationmode:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "alternate shell:s:"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "shell working directory:s:"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "gatewayhostname:s:$Passerelle"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "gatewayusagemethod:i:2"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "gatewaycredentialssource:i:4"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "gatewayprofileusagemethod:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "promptcredentialonce:i:1"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "gatewaybrokeringtype:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "use redirection server name:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "rdgiskdcproxy:i:0"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "kdcproxyname:s:"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "drivestoredirect:s:"
ADD-content -path "$RDPDir\$NomUtilisateur.rdp" -value "username:s:$Domaine.$TLD\$NomUtilisateur"
}
else
{
# Si le fichier existe déjà, afficher un message d’avertissement
Write-Warning "`n Le fichier $NomUtilisateur.rdp existe deja dans le répertoire $RDPDir"

}

##### Ouverture des sessions de bureau à distance. #####

# Enregistrement des infos de connexions

cmdkey /add:$RDSServer /user:$NomUtilisateur@$Domaine.$TLD /pass:$MotDePasse

# Connexion au serveur par l'utilisateur

mstsc "$RDPDir\$NomUtilisateur.rdp"
# Suppression des infos de connexions de l'utilisateur de la mémoire système

cmdkey /delete:$RDSServer

# Fin de la boucle
Pause
}

##### Fin du script #####

$host.ui.RawUI.ForegroundColor = 'Red'
Write-Host "`n Au revoir !!!"
$host.ui.RawUI.ForegroundColor = 'Green'
Pause

Contenu du fichier csv :
Nom;Prenom;NomComplet;Utilisateur;MotDePasse;Groupe;UniteOrganisation;UniteOrganisationRacine;Domaine;TLD;Serveur;Passerelle