AD – Script Création d’Utilisateurs (Suite…)

Je vous propose ce script qui permet d’ajouter des utilisateurs en masse idem que ce post http://www.purplescreen.eu/?p=920
Mais un peu plus complet. Il gère les erreurs utilisateurs et propose des templates utilisateur pour les ajouter dans les groupes AD souhaitez. Il faudra mettre vos templates dans une OU séparer et modifier les lignes correspondantes a votre infrastructure.

#Script by Olivier Gosselin
 #http://www.purplescreen.eu/
 #Chemin du fichier TXT
 #Champ1;Champ2;Champ3
 #TemplateUser;FirstName;LastName

#Import-module ActiveDirectory
 $File = Get-Content -Path "ChemindeVotreFichierTXT"
 #A quel endroit je veux créer les utilisateurs
#Exemple pour ces lignes (mettre le chemin pour les templates)
$PathOUDestination = "OU=Users,OU=HOME,DC=home,DC=local"
$OUTemplate = "OU=Templates,OU=Users,OU=HOME,DC=home,DC=local"
 $NbCaracterePassword = "10"
 $upnName = "@home.local"

#Password complexe modifier la valeur $NbCaracterePassword selon vos besoins
 function GenPassword () {
 $Assembly = Add-Type -AssemblyName System.Web
 $password = [System.Web.Security.Membership]::GeneratePassword($NbCaracterePassword,2)
 return $password
 }

Foreach ($line in $File) {
 #On découpe avec de ;
 $line_splitted = $line.split(";")
 #On créer l'utilisateur
 $password = GenPassword
 $TemplateUser = $line_splitted[0]
 $firstName = $line_splitted[1]
 $lastName = $line_splitted[2]
 ##On récupère le login en fonction du fisrt Name et et Last Name
 $firstNameLetter = $firstName.Substring(0,1)
 $login = "$firstNameLetter$lastName".Replace(' ','')
 $Userlogin = $login.ToLower()
 #$MembersGroup = $Userlogin
 $secureString = convertto-securestring "$password" -asplaintext -force

#On vérifier si une valeur est présente dans la liste
 if (!$TemplateUser) {
 $SelectTemplate = Get-ADUser -SearchBase $OUTemplate -Filter *
 $CountSelect = $SelectTemplate.count
 Write-Host "Aucun template de renseigner dans le fichier pour l'utilisateur $Userlogin"
 for ($i=0;$i -lt $CountSelect;$i++) {
 Write-Host $i " : "$SelectTemplate.Name[$i]
 }#FIN for
 $MaxVal = $i-1
 do {
 $ChoixTemplate = Read-Host "Votre Choix ?[0-"$MaxVal"]"
 } while ((!$ChoixTemplate) -or ($ChoixTemplate -ge $CountSelect) -or ($ChoixTemplate -match '\D+'))
 $TemplateUser = $SelectTemplate.Name[$ChoixTemplate]
 #Write-Host "Votre choix est :" $Template

#Recuperation du SAMObject pour le template
 $templateSAM = Get-ADUser -Filter {(Name -eq $TemplateUser)}
 $templateSAM = $templateSAM.SamAccountName

#Le template correspond avec un des utilisateurs template. On créer l'utilisateur et on utilise le template
 #Creation de l'utilisateur
 New-ADUser -UserPrincipalName "$Userlogin$upnName" -SamAccountName $Userlogin -Name "$firstName $lastName" -GivenName $firstName -DisplayName "$firstName $lastName" -Surname $lastName -Path "$PathOUDestination" -Description "Password : $password" -ChangePasswordAtLogon 0 -CannotChangePassword 0 -AccountPassword $secureString -Enabled 1
 #Ajout dans les groupes
 Get-ADUser -Identity $templateSAM -Properties memberof | Select-Object -ExpandProperty memberof | Add-ADGroupMember -Members $Userlogin
 }

#Si une valeur est présente, on vérifie que la valeur est bonne
 else {
 $SelectTemplate = Get-ADUser -SearchBase $OUTemplate -Filter *
 $CountSelect = $SelectTemplate.count
 if ($SelectTemplate.Name -contains $TemplateUser) {
 Write-Host "Le template pour user $Userlogin a été retrouver dans les templates disponibles. L'utilisateur est créé $Userlogin"
 Write-Host "=================================================================================================================="

#Recuperation du SAMObject pour le template
 $templateSAM = Get-ADUser -Filter {(Name -eq $TemplateUser)}
 $templateSAM = $templateSAM.SamAccountName

#Write-Host "SamTemplate :" $templateSAM.SamAccountName
 #Le template correspond avec un des utilisateurs template. On créer l'utilisateur et on utilise le template
 #Creation de l'utilisateur
 New-ADUser -UserPrincipalName "$Userlogin$upnName" -SamAccountName $Userlogin -Name "$firstName $lastName" -GivenName $firstName -DisplayName "$firstName $lastName" -Surname $lastName -Path "$PathOUDestination" -Description "Password : $password" -ChangePasswordAtLogon 0 -CannotChangePassword 0 -AccountPassword $secureString -Enabled 1
 #Ajout dans les groupes
 Get-ADUser -Identity $templateSAM -Properties memberof | Select-Object -ExpandProperty memberof | Add-ADGroupMember -Members $Userlogin

##############Debug
 #Write-Host "Debug :"
 #Write-Host "Template SAM : $templateSAM"
 #Write-Host "UpN : $Userlogin$upnName"
 #Write-Host "Login : $Userlogin"
 #Write-Host "FirstName : $firstName"
 #Write-Host "LastName : $lastName"
 #Write-Host "PathOU : $PathOUDestination"
 #Write-Host "Password : $password"
 #Write-Host "MemberGroup : $MembersGroup"

}
 else {
 $SelectTemplate = Get-ADUser -SearchBase $OUTemplate -Filter *
 $CountSelect = $SelectTemplate.count
 Write-Host "Le template pour user $Userlogin est différent des templates disponibles. Merci d'en choisir un dans la liste"
 Write-Host "============================================================================================================"
 for ($i=0;$i -lt $CountSelect;$i++) {
 Write-Host $i " : "$SelectTemplate.Name[$i]
 }#FIN for
 $MaxVal = $i-1
 do {
 $ChoixTemplate = Read-Host "Votre Choix ?[0-"$MaxVal"]"
 } while ((!$ChoixTemplate) -or ($ChoixTemplate -ge $CountSelect) -or ($ChoixTemplate -match '\D+'))
 $TemplateUser = $SelectTemplate.Name[$ChoixTemplate]
 #Write-Host "Votre choix est :" $Template

#Recuperation du SAMObject pour le template
 $templateSAM = Get-ADUser -Filter {(Name -eq $TemplateUser)}
 $templateSAM = $templateSAM.SamAccountName

#Le template correspond avec un des utilisateurs template. On créer l'utilisateur et on utilise le template
 #Creation de l'utilisateur
 New-ADUser -UserPrincipalName "$Userlogin$upnName" -SamAccountName $Userlogin -Name "$firstName $lastName" -GivenName $firstName -DisplayName "$firstName $lastName" -Surname $lastName -Path "$PathOUDestination" -Description "Password : $password" -ChangePasswordAtLogon 0 -CannotChangePassword 0 -AccountPassword $secureString -Enabled 1
 #Ajout dans les groupes
 Get-ADUser -Identity $templateSAM -Properties memberof | Select-Object -ExpandProperty memberof | Add-ADGroupMember -Members $Userlogin

}
 } #Fin else
 } #Fin foreach

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.