Question aide pour corriger script AD

Plus d'informations
il y a 3 semaines 2 jours - il y a 3 semaines 2 jours #30407 par garrigues
Bonjour à vous, j'ai pas mal galéré entre de nombreuses recherches , modifications des CSV, modifications du script mais finalement je suis arrivé a créer un script qui permet une fois que l'AD est installé de créer une UO pricipale (manuellement), et ensuite les UO secondaires,groupes, utilisateurs et ajout des utilistateurs dans leurs groupes automatiques via 3 fichiers CSV.

Cependant il y a quelques petit soucis, je pense que les vrai créateurs de script rigoleront en voyant le miens , mais il est fonctionnel.

#Chargement des modules active directory Import-Module ActiveDirectory

#création de l'UO racine:

$Domain = read-Host "non de votre domaine ex: DC=myDomain,DC=com"
$Root_OU = Read-Host "nom de votre OU racine"

if ((Get-ADOrganizationalUnit -filter "name -like'*$($Root_OU)'"))
{ echo "l'organisation $Root_OU est deja presente dans l'AD" }

else { New-ADOrganizationalUnit -Name $Root_OU -Path $Domain -ProtectedFromAccidentalDeletion $false
echo "la creation de l'organisation $Root_OU a fonctionne correctement" }

#Creation des UO:

$OUs=import-csv -path "C:\OU-AP.csv" -delimiter ";"
foreach($ou in $OUs)

{ if ((Get-ADOrganizationalUnit -filter "name -like'*$($ou)'"))
{ write-host "l'organisation $ou est deja presente dans l'AD" }

if ((Get-ADOrganizationalUnit -filter "name -notlike'*$($ou)'"))

{ try
{ New-ADOrganizationalUnit -Name $ou.name -Path $ou.path -ProtectedFromAccidentalDeletion $false }

catch
{ echo "la creation de l'organisation $ou a fonctionne correctement" }
}
}

#Creation des groupes:

$Groups=import-csv -path "C:\groupes.csv" -delimiter ";"
foreach($Group in $Groups)

{ if ((Get-ADGroup -filter "name -like'*$($Group)'"))
{ write-host "le groupe $Group est deja presente dans l'AD" }

if ((Get-ADGroup -filter "name -notlike'*$($ou)'"))

{ try
{ New-ADGroup -GroupScope: "Global" -GroupCategory: "Security" -Name $Group.name -Path $Group.path }

catch
{ echo "la creation du groupe $Goup a fonctionne correctement" }
}
}

#création des utilisateurs
# Importation des utilisateurs depuis le fichier CSV spécifié

$Users=import-csv -path "C:\users-domjacom.csv" -delimiter ";"

# Demande du mot de passe par défaut $password=Read-Host -AsSecureString "Taper le mot de passe par défaut des utilisateurs" -PassThrue -PasswordNeverExpire $true

# Création de l'utilisateur

foreach($user in $Users)
{ $nom= $user.nom
$prenom= $user.prenom
$Oud= $user.path
$sam= $user.SamAccountName
$princ= $user.UserPrincipalName

$new= New-ADUser -Name $nom -GivenName $prenom -SamAccountName $sam -UserPrincipalName $princ -Path $Oud -enabled $true -AccountPassword $password }

#Ajout des utilisateurs dans les groupes primaires et secondaires

#Ajout des utilisateurs aux groupes primaires
$UGs=import-csv -path "C:\users-domjacom.csv" -delimiter ";"

foreach($UG in $UGs) { Add-ADGroupMember -Members $UG.SamAccountName -Identity $UG.groupe }

#Ajout des utilisateurs aux groupes secondaires
$UGs=import-csv -path "C:\users-domjacom.csv" -delimiter ";"

foreach($UG in $UGs) { Add-ADGroupMember -Members $UG.SamAccountName -Identity $UG.groups }

Donc ce script fonctionne mais j'ai voulu tester de le relancer pour vérifier si mes test de créations UOs,groupes fonctionnaient je n'ai eu que le message à chaque fois me disant que l'UO, le groupe a bien été créé alors qu'il n'en a pas recréé et qu'il aurait dû me dire qu'ils existaient déjà. je voudrais donc votre avis ou vos suggestions pour corriger ce 1er soucis.

le 2ème soucis que je rencontre et ou je ne trouve pas de solutions via une commande c'est que j'ai 2 utilisateurs avec le même nom de famille dans la même UO mais le script ne m'en créé qu'1, donc je ne sais plus trop quoi faire pour ce problème.
Dernière édition: il y a 3 semaines 2 jours par garrigues.

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

Plus d'informations
il y a 3 semaines 2 jours #30415 par Laurent Dardenne
En l'état ton code est surement fonctionnel mais illisible...
Qq conseils : retour à la ligne et indentation ça aide à lire.
Ensuite le cmdlet Write-Debug aide, tout le monde, beaucoup et trés souvent !

>>je pense que les vrai créateurs de script rigoleront en voyant le miens
Tant que tu ne fais pas pleurer les mainteneurs ;-)

Tutoriels PowerShell

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

Plus d'informations
il y a 3 semaines 2 jours #30420 par garrigues
Réponse de garrigues sur le sujet aide pour corriger script AD
oui désolé j'ai poster un poil vite . j'ai modifié pour que sa soit peut être plus clair et lisible

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

Plus d'informations
il y a 3 semaines 1 jour #30422 par garrigues
Réponse de garrigues sur le sujet aide pour corriger script AD
bon je reviens vers vous car il s'avère que j'ai trouvé une solution, je suis pas sûr que sa soit la bonne manière de faire mais sa a l'air de fonctionner et j'ai bien mes 2 utilisateurs créés dans la même OU

# Importation des utilisateurs depuis le fichier CSV spécifié
$Users=import-csv -path "C:\users-domjacom.csv" -delimiter ";"

# Demande du mot de passe par défaut
$password=Read-Host -AsSecureString "Taper le mot de passe par défaut des utilisateurs" -PassThrue -PasswordNeverExpire $true

# Création de l'utilisateur
foreach($user in $Users)
{
$nom= $user.Name
$prenom= $user.prenom
$Oud= $user.path
$sam= $user.SamAccountName
$princ= $user.UserPrincipalName
$mail= $user.EmailAddress
$sname= $user.nom

   $new= New-ADUser -Name $nom -GivenName $prenom -Surname $sname -SamAccountName $sam -UserPrincipalName $princ -emailaddress $mail -Path $Oud -enabled $true -AccountPassword $password

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

Plus d'informations
il y a 3 semaines 1 jour #30425 par Laurent Dardenne
Salut,
>>je suis pas sûr que sa soit la bonne manière
La bonne manière c'est lorsque cela fonctionne, ensuite est-ce maintenable ? C'est une autre question.

Pour être assuré que cela fonctionne, que cela réponde à ton besoin, tu peux créer des tests unitaires avec Pester, mais c'est une autre étape ;-)

Une possible amélioration :
#hashtable
 $parameters=@{
    Name= $user.Name
    GivenName= $user.prenom
    Surname=$user.nom
    Path= $user.path
    SamAccountName= $user.SamAccountName
    UserPrincipalName= $user.UserPrincipalName
    emailaddress = $user.EmailAddress
    Enabled= $true
 }
  #Splatting ( clé de hastable= nom d'un paramètre ; valeur de la clé = valeur du paramètre)
 $new= New-ADUser @Parameters -AccountPassword $password 
A noter qu'il existe $user.Name et $user.Nom ...

Si possible utiliser la même langue pour toute la chaîne (je dis ça je dis rien).

Tutoriels PowerShell

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

Plus d'informations
il y a 3 semaines 1 jour #30426 par Laurent Dardenne
Un oubli, j'ai lu ceci
catch
{ echo "la creation de l'organisation $ou a fonctionne correctement" }
}
...
catch
{ echo "la creation du groupe $Goup a fonctionne correctement" }
es-tu certains du message en cas d'erreur ?

Tutoriels PowerShell

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

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