Question [Résolu] Importer les users, OU et groupes vers AD

Plus d'informations
il y a 9 ans 7 mois #22170 par Toto JDD
Merci pour l'observation. Effectivement, j'ai oublié de créer les OU Bruxelles, Namur et Liège dans l'OU Region.

ça l'air de marcher. Les différents groupes sont créer dans les différentes OU; mais sauf les utilisateurs voir l'image en attache.

La pièce jointe script_test1.pdf est absente ou indisponible

Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22171 par Philippe
voici une version qui rajoute l'affichage de l'erreur en magenta


[code:1]

$liste = Import-Csv -Delimiter \";\" -Path \"D:\data\users.csv\" -Encoding UTF7

# OU de base ou seront créé les utilisateurs
$baseou = \"OU=Region,DC=domaine,DC=com\"

# mot de passe par defaut à la creation de l'utilisateur
$password = \"azerty\"

# test si l'AD est injoingnable
try {
$ok = get-ADOrganizationalUnit -Filter {DistinguishedName -eq $baseou}
}
catch {
write-host \"erreur l'AD est injoingnable\" -foregroundcolor Red
exit
}

# test si l'OU de base ou seront créé les utilisateurs existe
if ($ok) {
foreach ($itempo in $liste) {
$dep = $itempo.Groupe
$region = $itempo.ou
# création du nom de l'OU de la region ou sera créé l'utilisateur
$ou = \"OU=$region,$baseou\"

# test si l'OU de la region ou sera créé l'utilisateur et le groupe departement existe
if ((get-ADOrganizationalUnit -Filter {DistinguishedName -eq $ou})) {

# test si le groupe departement esixte dans OU de base
If ((Get-ADGroup -Filter {Name -eq $dep})) {
write-host \"ce groupe : \" -foregroundcolor Yellow -NoNewline
write-host $dep -NoNewline
write-host \" est deja present dans l'OU : \" -foregroundcolor Yellow -NoNewline
write-host $ou
}
else {
New-ADGroup -Name $dep -Path $baseou -GroupScope Global
write-host \"création du groupe \" -ForegroundColor Green -NoNewline
write-host $dep -NoNewline
write-host \" dans l'OU : \" -foregroundcolor Green -NoNewline
write-host $ou
}

# test si le groupe departement esixte dans OU de la region
If ((Get-ADGroup -Filter \"Name -eq `\"$dep$region`\"\"«»)) {
write-host \"ce groupe : \" -foregroundcolor Yellow -NoNewline
write-host $dep$region -NoNewline
write-host \" est deja present dans l'OU : \" -foregroundcolor Yellow -NoNewline
write-host $ou
}
else {
New-ADGroup -Name \"$dep$region\" -Path $ou -GroupScope Global
write-host \"création du groupe \" -ForegroundColor Green -NoNewline
write-host $dep$region -NoNewline
write-host \" dans l'OU : \" -foregroundcolor Green -NoNewline
write-host $ou
}

$DisplayName = $itempo.Nom + \" \" + $itempo.Prenom
$Name = $itempo.Nom
$SAM = $($Name.substring(0,1)) + $itempo.Prenom
# création de l'utilisateur
# test si le login est deja utilisé dans l'AD (les login sont unique dans l'AD)
If ((Get-ADUser -Filter {SamAccountName -eq $SAM})) {
write-host \"un utilisateur existe deja dans l'AD avec ce login \" -foregroundcolor Yellow -NoNewline
write-host $SAM -NoNewline
write-host \" et le nom : \" -foregroundcolor Yellow -NoNewline
write-host $DisplayName -NoNewline
Write-Host \" et n'a été ajouté dans AUCUN groupe\" -ForegroundColor Magenta
}
else {
try {
# ajout de l'utilisateur dans l'OU de la region
New-ADUser -Name $DisplayName -SamAccountName $SAM -UserPrincipalName $SAM -DisplayName $DisplayName -GivenName $Name -Surname $temp.Prenom -Enabled $true -Path $ou -AccountPassword $(ConvertTo-SecureString -AsPlainText $password -Force)
write-host \"Utilisateur \" -foregroundcolor Green -NoNewline
write-host $DisplayName -NoNewline
write-host \" à été ajouté dans l'OU : \" -foregroundcolor Green -NoNewline
write-host $ou
}
catch {
write-host \"erreur durant la création de : \" -foregroundcolor Red -NoNewline
write-host $DisplayName -NoNewline
write-host \" dans l'OU : \" -foregroundcolor Red -NoNewline
write-host $ou
Write-Host $_ -ForegroundColor Magenta
}
try {
if ((Get-ADGroupMember $dep).SamAccountName -notcontains $SAM) {
# ajout de l'utilisateur dans le groupe departement de l'OU de base
Add-ADGroupMember -Identity $dep -Members $SAM
write-host $DisplayName -NoNewline
write-host \" ajouté dans le groupe : \" -foregroundcolor Green -NoNewline
write-host $dep
}
else {
write-host $DisplayName -NoNewline
write-host \" est deja dans le groupe : \" -foregroundcolor Yellow -NoNewline
write-host $dep
}
}
catch {
write-host \"erreur durant l'ajout \" -ForegroundColor Red -NoNewline
write-host $DisplayName -NoNewline
write-host \" dans le groupe : \" -foregroundcolor Red -NoNewline
write-host $dep
Write-Host $_ -ForegroundColor Magenta
}
try {
if ((Get-ADGroupMember $dep$region).SamAccountName -notcontains $SAM) {
# ajout de l'utilisateur dans le groupe departement de l'OU de la region
Add-ADGroupMember -Identity \"$dep$region\" -Members $SAM
write-host $DisplayName -NoNewline
write-host \" ajouté dans le groupe : \" -foregroundcolor Green -NoNewline
write-host $dep$region
}
else {
write-host $DisplayName -NoNewline
write-host \" est deja dans le groupe : \" -foregroundcolor Yellow -NoNewline
write-host $dep$region
}
}
catch {
write-host \"erreur durant l'ajout dans le groupe : \" -foregroundcolor Red -NoNewline
write-host \"erreur durant l'ajout \" -ForegroundColor Red -NoNewline
write-host $DisplayName -NoNewline
write-host \" dans le groupe : \" -foregroundcolor Red -NoNewline
write-host $dep$region
Write-Host $_ -ForegroundColor Magenta
}
}
}
else {
write-host \"erreur l'OU de la region est injoingnable : \" -foregroundcolor Red -NoNewline
write-host $ou
}
}
}
else {
write-host \"erreur l'OU de base est injoingnable : \" -foregroundcolor Red -NoNewline
write-host $baseou
}


[/code:1]<br><br>Message édité par: 6ratgus, à: 22/08/16 10:24

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 7 mois #22173 par Toto JDD
ça marche !!!

Exactement c'est ce que je cherchait. Merci infiniment 6ratgus. Je me met à bien comprendre et assimiler ce script. Je n’hésiterai pas de revenir vers vous pour un prochain coaching.

Merci

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 6 mois #22194 par Philippe
nouvelle version du script avec correction des bugs (inversion entre nom et prénom plus des problèmes d'affichage de message)
j'ai rajouté :
- la possibilité d'avoir un fichier log
- la creation des OUs du fichiers CSV à de la base OU indiqué
- la création automatique de l'UPN d'après le nom du domaine courant
- un peu plus de gestion de risque d'erreur
- reduction de la taille du script

[code:1]
#
# creation d'utilisateur, de groupe et d'OU automatiquement dans le domaine courant
# depuis les données d'un fichier csv au format : nom,prenom,ou,groupe
#

Import-Module ActiveDirectory

$liste = Import-Csv -Delimiter \&quot;;\&quot; -Path \&quot;c:\users.csv\&quot; -Encoding UTF7

# OU de base ou seront créé les utilisateurs
$baseou = \&quot;OU=ou-des-utilisateurs,DC=domaine,DC=lan\&quot;

# mot de passe par defaut à la creation de l'utilisateur
$password = \&quot;azerty\&quot;

# chemin et nom du fichier log. si $null ou vide : pas de log
$log = \&quot;\&quot; # \&quot;c:\temp\log.txt\&quot;

# test si l'AD est injoingnable et récupère le nom du domaine pour la creation de l'upn
try {
$upn = \&quot;@\&quot;+(Get-ADDomainController).domain
}
catch {
write-host \&quot;erreur l'AD est injoingnable\&quot; -foregroundcolor Red
exit
}

function affmessage {
Param (
[string]$couleur,
[string]$Param1 = \&quot;\&quot;,
[string]$Param2 = \&quot;\&quot;,
[string]$Param3 = \&quot;\&quot;,
[string]$Param4 = \&quot;\&quot;,
[string]$Param5 = \&quot;\&quot;,
[string]$erreur = \&quot;\&quot;
)

Write-Host $Param1 -foregroundcolor $couleur -NoNewline
write-Host $Param2 -NoNewline
write-Host $Param3 -foregroundcolor $couleur -NoNewline
write-Host $Param4 -NoNewline
write-Host $Param5 -foregroundcolor $couleur -NoNewline
write-Host \&quot; \&quot;$erreur -foregroundcolor Magenta

if ($log -and $log -ne \&quot;\&quot;«») {
\&quot;$(Get-Date -Format \&quot;dd/MM/yy hh:mm:«»ss\&quot;«») $Param1$Param2$Param3$Param4$Param5 $erreur\&quot; &gt;&gt; $log
}
}

# test si l'OU de base ou seront créé les utilisateurs existe
if (get-ADOrganizationalUnit -Filter {DistinguishedName -eq $baseou}) {
foreach ($itempo in $liste) {
$region = $itempo.ou.Trim() # nom de l'OU region
$ou = \&quot;OU=$region,$baseou\&quot; # création du nom de l'OU de la region ou sera créé l'utilisateur
$dep = $itempo.Groupe.Trim() # nom du groupe departement/service
$Nom = $itempo.Nom.Trim() # nom de l'utilisateur
$prenom = $itempo.Prenom.Trim() # prenom de l'utilisateur
$DisplayName = $Nom + \&quot; \&quot; + $Prenom # displayname utilisé dans l'arboresence de l'AD et l'affichage du menu demarrage de l'utilisateur
$SAM = $Nom.Chars(0) + $Prenom # login = premiere lettre du nom + prenom entier

# création de l'OU de la region
if ((get-ADOrganizationalUnit -Filter {DistinguishedName -eq $ou})) {
affmessage \&quot;Yellow\&quot; \&quot;cette OU : \&quot; $ou \&quot; est deja present dans l'AD \&quot;
}
else {
New-ADOrganizationalUnit -Name $region -Path $baseou
affmessage \&quot;Green\&quot; \&quot;création de l'OU : \&quot; $region \&quot; dans l'OU : \&quot; $baseou
}

# test si l'OU de la region ou sera créé l'utilisateur existe
if ((get-ADOrganizationalUnit -Filter {DistinguishedName -eq $ou})) {

# test si le groupe departement esixte dans OU de base
If ((Get-ADGroup -Filter {Name -eq $dep})) {
affmessage \&quot;Yellow\&quot; \&quot;ce groupe : \&quot; $dep \&quot; est deja present dans l'OU : \&quot; $baseou
}
else {
New-ADGroup -Name $dep -Path $baseou -GroupScope Global
affmessage \&quot;Green\&quot; \&quot;création du groupe \&quot; $dep \&quot; dans l'OU de base : \&quot; $baseou
}

# test si le groupe service esixte dans OU de la region
If ((Get-ADGroup -Filter \&quot;Name -eq `\&quot;$dep$region`\&quot;\&quot;«»)) {
affmessage \&quot;Yellow\&quot; \&quot;ce groupe : \&quot; $dep$region \&quot; est deja present dans l'OU : \&quot; $ou
}
else {
New-ADGroup -Name \&quot;$dep$region\&quot; -Path $ou -GroupScope Global
affmessage \&quot;Green\&quot; \&quot;création du groupe \&quot; $dep$region \&quot; dans l'OU region : \&quot; $ou
}

# création de l'utilisateur
# test si le login est deja utilisé dans l'AD (les login sont unique dans l'AD)
If ((Get-ADUser -Filter {SamAccountName -eq $SAM})) {
affmessage \&quot;Yellow\&quot; \&quot;un utilisateur existe deja dans l'AD avec ce login \&quot; $SAM \&quot; et le nom : \&quot; $DisplayName -erreur \&quot;et n'a été rajouté dans AUCUN groupe\&quot;
}
else {
try {
# ajout de l'utilisateur dans l'OU de la region
New-ADUser -Name $DisplayName -SamAccountName $SAM -UserPrincipalName \&quot;$SAM$upn\&quot; -DisplayName $DisplayName -GivenName $Prenom -Surname $Nom -Enabled $true -Path $ou -AccountPassword $(ConvertTo-SecureString -AsPlainText $password -Force)
affmessage \&quot;Green\&quot; \&quot;l'utilisateur \&quot; $DisplayName \&quot; à été ajouté dans l'OU : \&quot; $ou
}
catch {
affmessage \&quot;Red\&quot; \&quot;erreur durant la création de : \&quot; $DisplayName \&quot; dans l'OU : \&quot; $ou -erreur $_
# Write-Host $_ -ForegroundColor Magenta
}
try {
# test si l'utilisateur est deja dans le groupe service global
if ((Get-ADGroupMember $dep).SamAccountName -notcontains $SAM) {
# ajout de l'utilisateur dans le groupe departement de l'OU de base
Add-ADGroupMember -Identity $dep -Members $SAM
affmessage \&quot;Green\&quot; \&quot;\&quot; $DisplayName \&quot; ajouté dans le groupe : \&quot; $dep
}
else {
affmessage \&quot;Yellow\&quot; \&quot;\&quot; $DisplayName \&quot; est deja dans le groupe : \&quot; $dep
}
}
catch {
affmessage \&quot;Red\&quot; \&quot;erreur durant l'ajout \&quot; $DisplayName \&quot; dans le groupe : \&quot; $dep -erreur $_
}
try {
# test si l'utilisateur est deja dans le groupe service local
if ((Get-ADGroupMember $dep$region).SamAccountName -notcontains $SAM) {
# ajout de l'utilisateur dans le groupe departement de l'OU de la region
Add-ADGroupMember -Identity \&quot;$dep$region\&quot; -Members $SAM
affmessage \&quot;Green\&quot; \&quot;\&quot; $DisplayName \&quot; ajouté dans le groupe : \&quot; $dep$region
}
else {
affmessage \&quot;Yellow\&quot; \&quot;\&quot; $DisplayName \&quot; est deja dans le groupe : \&quot; $dep$region
}
}
catch {
affmessage \&quot;Red\&quot; \&quot;erreur durant l'ajout de : \&quot; $DisplayName \&quot; dans le groupe : \&quot; $dep$region -erreur $_
}
}
}
else {
affmessage \&quot;Red\&quot; \&quot;erreur l'OU de la region est injoignable : \&quot; $ou
}
}
}
else {
affmessage \&quot;Red\&quot; \&quot;erreur l'OU de base est injoignable : \&quot; $baseou
}

[/code:1]

ça commence être un script complet et suffisamment clair pour s'adapté aux contraintes courantes des entreprises<br><br>Message édité par: 6ratgus, à: 24/08/16 16:15

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 6 mois #22230 par Toto JDD
Merci bcp pour ce caoching, ...

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.047 secondes
Propulsé par Kunena