Question création multi user AD

Plus d'informations
il y a 14 ans 3 mois #10666 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:création multi user AD
Bonjour,
corly écrit:

Il s'agit déjà de spécifier/détailler ce que tu dois faire.
...


Je vais détailler:

Détaille le pour TOI, c'est ton projet pas le mien, moi j'en ai un en cours qui me prend tout mon temps.
Encore une fois, découpe ton projet par tâche, ensuite pour chaque tâche crée un post sur ce forum, dans lequel tu te concentres sur UN sujet à la fois, ainsi, je pense que tu pourras trouver de l'aide + facilement.
Avec un peu de méthode ton projet n'a rien d'insurmontable.

Pour l'export XL voir ce post :
powershell-scripting.com/index.php?optio...30&catid=14#2630
Il reste à implémenter une boucle si le fichier contient + onglets/feuilles, ce qui fait que la méthode doit recevoir une structure de donnée associant un n° d'onglet à un nom de fichier.

corly écrit:

ce n'est pas gênant en soi mais cela serait + \"conforme\" à la réalité..

Spécification : régle de nommages AD.
C'est un champ calculé, dans un premier temps insére le nom. Tu affineras + tard. Sous réserve d'avoir une plateforme de test reconstructible rapidement.
corly écrit:

au risque de passer pour un noob,

Je te rassures, et sans vouloir t'offenser, tu ne risques rien sur ce point. Pourquoi donc s'excuser de ne pas connaitre ?
corly écrit:

je me demandais si je devais modifier la commande d'import en spécifiant le fichier csv

Précise un nom complet dans une variable, c'est plus simple. Ainsi tu contrôles sa validité une seule fois.
corly écrit:

n'ayant pas de PS fonctionnel avec le module AD pour le moment (je ne verrai ça que cet aprem), je ne peu pas faire de test...

Rien ne t'empêches de placer des \"bouchons\" dans ton script principal. C'est à dire du code qui simule le résultat :
[code:1]
function New-ADUSer {
param ($Name)
write-host \"Crée l'utilisateur $user\"«»)
}
[/code:1]
corly écrit:

une autre question, dans le cas où je voudrai avoir une structure d'AD correcte...

L'AD n'étant pas mon domaine de compétence, applique le principe énoncé au début de ce post.
corly écrit:

edit: après test sur un PS sans module AD, la commande avec la variable me retourne
[code:1]Import-Csv : Impossible de lier l'argument au paramètre « Path », car il s'agit d'une chaîne vide.
[/code:1]

Le message n'est pas assez clair ?
Utilise dans ton code le cmdlet Write-Debug , exemple :
[code:1]
Write-Debug \"user=$user\"
[/code:1]
Puis ajoute dans ton profile utilisateur PS, les fonctions suivantes :
[code:1]
#Crée un prompt imbriqué, permet de placer une sotre de point d'arrêt dans du code
#saisie Exit pour continuer l'exécution du code \"parent\".
function NestedPrompt{$host.EnterNestedPrompt()}
function dbgOn {$global:«»DebugPreference=\"continue\"}
function dbgOff {$global:«»DebugPreference=\"Silentlycontinue\"}
[/code:1]
Appel dbgon avant d'exécuter ton coder à débuger, ainsi chaque instruction Write-debug affichera des traces sur la console.
Une fois le code validé Appel dbgoff.
Tu peux aussi donc procéder ainsi :
[code:1]
#Main
dbgoff
Function1
dbgon
Function2
Function3
dbgoff
Function4
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 3 mois #10671 par BENOIT Damien
Réponse de BENOIT Damien sur le sujet Re:création multi user AD
Bonjour,

Pour le moment j'ai une colonne \"nom\", une \"prénom\".
pour le moment le userlogon est \"nom.prénom\", mais il est vrai que comme dans l'exemple de script de Damien Benoit, j'ai plus eu l'habitude de la syntaxe \"nomp\".
j'ai trouvé une formule permettant de faire \"nom P.\" mais pas celle permettant de ne pas mettre l'espace..
ce n'est pas gênant en soi mais cela serait + \"conforme\" à la réalité..


La ligne [code:1]$displayname = $user.Surname +\" \"+ $user.GivenName[/code:1] est une simple concaténation de chaine. Ce qui donne \"DUPONT Tom\".

Autre question, dans le script fourni également par Damien Benoit il y a la phase import du csv :
[code:1]$ImportCSV = import-csv -path \"$fichier\" -delimiter \";\"[/code:1]
alors, au risque de passer pour un noob, je me demandais si je devais modifier la commande d'import en spécifiant le fichier csv ou si la variable gère ça automatiquement (puisque j'avais vu la commande qui \"spécifie\") comme [code:1]Import-CSV ./test_afpa.csv –Delimiter “;”[/code:1]


Je suis passé par une variable qui est affecté en paramètre lorsque je lance le script [code:1]NomDuScript.ps1 -fichier xxxx.csv[/code:1] ou xxx.csv est le contenu de la variable $fichier, je trouve cela plus facile d'utilisation.

une autre question, dans le cas où je voudrai avoir une structure d'AD correcte (dans mon cas, la fusion des 2 sites seront sous 1 seul domaine, mais nous séparerons les sites avec une OU \"site A\" et une \"site B\" qui auront une certaine organisation par la suite) et mettre un utilisateurs (toujours lors de la création multiple si c'est possible) dans les bonnes OU.
je m'explique, si Joe Black travaille dans le service comptabilité du site B, comment indique-t-on l'arborescence afin qu'il n'y ait pas une OU comptabilité hors des OU A & B crée mais bien B > Compta..
merci


Auras-tu :

Utilisateurs
Site A
|_ Comptabilité
|
Site B
|_ Comptabilité


Ou

Utilisateurs
Site A
|_ ComptabilitéA
|
Site B
|_ ComptabilitéB

?

Je te conseille déjà de regarder sur le script que j'ai posté [code:1]-Path $OUDN[/code:1] de la commande New-ADUser, Cela dépose l'utilisateur dans l'OU spécifié dans la variable $OUDN dans le cas de mon script.


Étant moi même encore débutant, je place un peu partout lorsque je fais des scripts des Write-Host (que je retire évidement par la suite...) à la suite de mes variables afin de déterminer ce que contiennent mes variables et ou bloque le script.
Par exemple :
[code:1]
$nom = $user.Surname
Write-Host \"Nom=\" $nom
[/code:1]

Mais comme le dit Laurent Dardenne, il faut mieux structurer et bien poser ce que tu souhaite, ça évite de se noyer.<br><br>Message édité par: Damien BENOIT, à: 28/11/11 14:38

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

Plus d'informations
il y a 14 ans 3 mois #10679 par Gaëtan Mandon
Réponse de Gaëtan Mandon sur le sujet Re:création multi user AD
bonjour,

merci pour vos conseils avisés..
alors, premièrement oui j'ai une plateforme de test, il est illusoire de croire que mon script sera fontionnel dès le départ donc afin de ne pas embrouiller mes camarades je fais mes tests de mon côté.

pour mon \&quot;souci\&quot; de nomP sans espace, j'avais remarqué cet espace dans la fonction et je l'avais enlevé sans meilleur résultat.. :s ce qui est normal puisque je me suis apperçu que mon fichier avait des espaces apèrs les noms.. Ca fonctionne normalement dorénavant..

j'ai trouvé un super outil: WiSAIS ( blogs.technet.com/b/pierrc/archive/2010/...ilisateurs-dchp.aspx )sur lequel j'ai occulté la phase création du csv automatisé (long quand on doit entrer utilisateur par utilisateur) et préféré modifier ma base afin qu'elle soit conforme au script, j'ai également occulté le xml puisque je pars sur un server déja installé. Bref, je ne me sers que du script de création d'user que j'ai modifié en \&quot;fixant\&quot; les paramètres domaine ou qui appelait 1 variable d'un fichier que je ne voulais pas utiliser..

j'ai quelques erreurs et pour le moment ca ne me crée qu'un utilisateur qui a pour nom le 1er nom de la liste mais ses infos sont celles du dernier de la liste..

voila où j'en suis actuellement, je reviendrai vous tenir au courant de mon avancement...



edit: j'avais oublié 1 partie ...

Auras-tu :

Utilisateurs
Site A
|_ Comptabilité
|
Site B
|_ Comptabilité


Ou


Utilisateurs
Site A
|_ ComptabilitéA
|
Site B
|_ ComptabilitéB

?


notre plan est basé dans le style de ton 1er exemple..
1 OU pour chaque site, mais à l'intérieur les \&quot;sous OU\&quot; sont les mêmes..
(mais pour le moment déjà j'essaie de faire simple, pas de distinction de site...)<br><br>Message édité par: corly, à: 30/11/11 10:17

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

Plus d'informations
il y a 14 ans 3 mois #10698 par Gaëtan Mandon
Réponse de Gaëtan Mandon sur le sujet Re:création multi user AD
Bonjour,

voilà, j'ai bien avancé..
j'arrive dorénavant à créer tous mes utilisateurs et à les placer dans mes OU.
comme précisé dans mon ancien post, j'ai fait l'impasse sur quelques infos et enfin ça fonctionne.
le script me renvoie une erreur sur un \&quot;setInfo\&quot; qui a \&quot;()\&quot;, mais le problème est que si j'enlève cette parenthèse vide, rien ne fonctionne...

j'ai appliqué votre méthode que j'ai nommée \&quot;dis moi ce que tu fais...\&quot; avec bon nombre de write-Host ce qui m'a permit d'avancer.

[code:1]#################################
# WiSAIS (Windows Server Automated Installation Solution)
#
# Desc : Importation des utilisateurs du fichier user.csv et ajout dans Active Directory
# Auteurs : Pierre Chesne (MS France), Samy Girard (MS France), Antoine Journaux (MS France)
# Version : 1.0
#
#################################


Write-Host \&quot;Création des utilisateurs dans l'Active Directory en cours ...\&quot;



#import du module Active Directory

Import-Module activedirectory


#création des OU \&quot;Echirolles\&quot; et \&quot;Pont-de-Claix\&quot;

$objDomain = [ADSI]\&quot;LDAP://localhost:389/dc=activup,dc=local\&quot;
$objOU = $objDomain.Create(\&quot;organizationalUnit\&quot;, \&quot;ou=Echirolles\&quot;)
$objOU.SetInfo()
$objDomain = [ADSI]\&quot;LDAP://localhost:389/dc=activup,dc=local\&quot;
$objOU = $objDomain.Create(\&quot;organizationalUnit\&quot;, \&quot;ou=Pont-de-Claix\&quot;)
$objOU.SetInfo()



#connexion à l'Active Directory

$objOU=[ADSI]\&quot;LDAP://localhost:389/DC=activup,DC=local\&quot;

if($objOU.Children -ne $null) {

# importation des data du fichier csv (se placer dans le dossier !!)

$dataSource=import-csv .\user_ech.csv
$cpt = 0
ForEach($dataRecord in $dataSource) {
$ou=$dataRecord.service

#vérification de l'existance de l'OU

if(($objOU.Children | where {$_.Path -match \&quot;OU=$ou\&quot;}) -eq $null){

#si elle n'existe pas on la crée

$objOU = $objOU.create(\&quot;organizationalUnit\&quot;, \&quot;ou=\&quot;+$ou)
$objOU.SetInfo()

}

else {

#sinon on place le curseur dessus pour que l'utilisateur soit crée dans la bonne OU

$objOU = $objOU.Children.Find(\&quot;OU=$ou\&quot;)
}

$SamAccountName=$dataRecord.login
$GivenName=$dataRecord.prenom
$sn=$dataRecord.nom
$cn=$GivenName + \&quot; \&quot; + $sn
$displayName=$cn
$description=$dataRecord.description
$UserPrincipalname=$SamAccountName +\&quot;@activup.local\&quot;
$telephoneNumber=$dataRecord.tel_bureau
$mail=$dataRecord.mail
#$homePhone=$dataRecord.tel_perso
$mobile=$dataRecord.tel_mobile

#on crée l'objet utilisateur dans Active Directory

$objUser=$objOU.Create(\&quot;User\&quot;,\&quot;CN=\&quot;+$cn)
Write-Host \&quot;$cn\&quot;
$objUser.Put(\&quot;SamAccountName\&quot;,$SamAccountName)
Write-Host \&quot;$SamAccountName\&quot;
$objUser.Put(\&quot;UserPrincipalName\&quot;,$UserPrincipalName)
Write-Host \&quot;$UserPrincipalName\&quot;
$objUser.Put(\&quot;DisplayName\&quot;,$Displayname)
Write-Host \&quot;$displayName\&quot;
#$objUser.Put(\&quot;Description\&quot;,$description)
$objUser.Put(\&quot;GivenName\&quot;,$GivenName)
Write-Host \&quot;$GivenName\&quot;
$objUser.Put(\&quot;sn\&quot;,$sn)
Write-Host \&quot;$sn\&quot;
$objUser.put(\&quot;telephoneNumber\&quot;,$telephoneNumber)
Write-Host \&quot;$telephoneNumber\&quot;
$objUser.put(\&quot;mail\&quot;,$mail)
Write-Host \&quot;$mail\&quot;
#$objUser.put(\&quot;homePhone\&quot;,$homePhone)
$objUser.put(\&quot;mobile\&quot;,$mobile)
Write-Host \&quot;$mobile\&quot;
$objUser.SetInfo

#$objUser.setPassword(\&quot;\&quot;)
#on ne met pas de mdp pour que l'utilisateur en choisisse un au premier démarrage

#on active le compte
#$objUser.psbase.InvokeSet(\&quot;AccountDisabled\&quot;,$false)
$objUser.SetInfo()

#on vérifie que l'utilisateur est bien crée et on rajoute le résultat dans le fichier ADlog.txt

if(($objOU.Children | where {$_.Path -match \&quot;CN=$cn\&quot;}) -ne $null) {
\&quot;User : \&quot;+$UserPrincipalName+\&quot; Ok\&quot; | Add-Content C:\ADlog.txt
}

$objOU=[ADSI]\&quot;LDAP://localhost:389/DC=activup,DC=local\&quot;

}
Write-Host \&quot;Création réussie!\&quot;


}
else {
\&quot;Failure\&quot; | Add-Content C:\ADlog.txt
}
[/code:1]

Comme vous le voyez, je crée 2 OU principales au départ, Echirolles et Pon-de-Claix.
J'aimerai maintenant placer les users dans des OU, dans ces OU..
j'ai testé en mettant :
[code:1]$objOU=[ADSI]\&quot;LDAP://localhost:389/ou=Echirolles,dc=activup,dc=local\&quot;[/code:1]
mais ça ne fonctionne pas du tout..
je ne sais pas comment je dois faire pour me placer dans la bonne OU.
si je dois faire un csv pour chaque site ou 1 qui aura une donnée exploitée en variable..
bref je suis un peu perdu.. :s

si quelqu'un peut m'aiguiller ;)

merci encore :)<br><br>Message édité par: corly, à: 1/12/11 16:12

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

Plus d'informations
il y a 14 ans 3 mois #10721 par Gaëtan Mandon
Réponse de Gaëtan Mandon sur le sujet Re:création multi user AD
Bonjour,
voilà, demain nous rendons notre projet, en retard et avec quelques petits problèmes mais bon... Nous ne sommes qu'en formation ^^

Pour ma part, je me suis satisfait de ce script que j'ai modifié à ma sauce afin de le rendre executable \&quot;correctement..
n'étant pas parvenu à créer mes users dans des sous-OU, je me suis contenté de créer en 1er lieu mes 2 OU \&quot;sites\&quot; et de faire une différenciation dans les sous-OU en rajoutant un préfixe dans le csv. Ensuite, on rentre manuellement les sous-OU dans les OU \&quot;sites\&quot;

Pour ma connaissance personnelle, j'aimerai quand même savoir comment je pourrai faire pour améliorer ce script.
autre question à propos de ce script, je ne comprends pas pourquoi de partout je vois le [code:1]$objUser.SetInfo()[/code:1] avec la parenthèse vide et que j'ai du en enlever afin de le rendre opérationnel. Mais, pour autant j'ai une erreur au milieu de mes \&quot;Write-Host\&quot; justement à propos de SetInfo mais si je la corrige alors c'est le script qui ne fonctionne pas.
Je dois zapper quelque chose quelque part, pour finir je pense que j'enlèverai les write-host afin de le rendre plus rapide.. visuellement du moins

[code:1]#################################
# WiSAIS (Windows Server Automated Installation Solution)
#
# Desc : Importation des utilisateurs du fichier user.csv et ajout dans Active Directory
# Auteurs : Pierre Chesne (MS France), Samy Girard (MS France), Antoine Journaux (MS France)
# Version : 1.0
#
#################################


Write-Host \&quot;Création des utilisateurs dans l'Active Directory en cours ...\&quot;



#import du module Active Directory

Import-Module activedirectory


#création des OU \&quot;Echirolles\&quot; et \&quot;Pont-de-Claix\&quot;

$objDomain = [ADSI]\&quot;LDAP://localhost:389/dc=activup,dc=local\&quot;
$objOU = $objDomain.Create(\&quot;organizationalUnit\&quot;, \&quot;ou=Echirolles\&quot;«»)
$objOU.SetInfo()
$objDomain = [ADSI]\&quot;LDAP://localhost:389/dc=activup,dc=local\&quot;
$objOU = $objDomain.Create(\&quot;organizationalUnit\&quot;, \&quot;ou=Pont-de-Claix\&quot;«»)
$objOU.SetInfo()



#connexion à l'Active Directory

$objOU=[ADSI]\&quot;LDAP://localhost:389/DC=activup,DC=local\&quot;

if($objOU.Children -ne $null) {

# importation des data du fichier csv (se placer dans le même répertoire !!)

$dataSource=import-csv .\user.csv
$cpt = 0
ForEach($dataRecord in $dataSource) {
$ou=$dataRecord.service

#vérification de l'existance de l'OU

if(($objOU.Children | where {$_.Path -match \&quot;OU=$ou\&quot;}) -eq $null){

#si elle n'existe pas on la crée

$objOU = $objOU.create(\&quot;organizationalUnit\&quot;, \&quot;ou=\&quot;+$ou)
$objOU.SetInfo()

}

else {

#sinon on place le curseur dessus pour que l'utilisateur soit crée dans la bonne OU

$objOU = $objOU.Children.Find(\&quot;OU=$ou\&quot;«»)
}

$SamAccountName=$dataRecord.login
$GivenName=$dataRecord.prenom
$sn=$dataRecord.nom
$cn=$GivenName + \&quot; \&quot; + $sn
$displayName=$cn
$description=$dataRecord.description
$UserPrincipalname=$SamAccountName +\&quot;@activup.local\&quot;
$telephoneNumber=$dataRecord.tel_bureau
$mail=$dataRecord.mail
#$homePhone=$dataRecord.tel_perso
$mobile=$dataRecord.tel_mobile

#on crée l'objet utilisateur dans Active Directory

$objUser=$objOU.Create(\&quot;User\&quot;,\&quot;CN=\&quot;+$cn)
Write-Host \&quot;$cn\&quot;
$objUser.Put(\&quot;SamAccountName\&quot;,$SamAccountName)
Write-Host \&quot;$SamAccountName\&quot;
$objUser.Put(\&quot;UserPrincipalName\&quot;,$UserPrincipalName)
Write-Host \&quot;$UserPrincipalName\&quot;
$objUser.Put(\&quot;DisplayName\&quot;,$Displayname)
Write-Host \&quot;$displayName\&quot;
#$objUser.Put(\&quot;Description\&quot;,$description)
$objUser.Put(\&quot;GivenName\&quot;,$GivenName)
Write-Host \&quot;$GivenName\&quot;
$objUser.Put(\&quot;sn\&quot;,$sn)
Write-Host \&quot;$sn\&quot;
$objUser.put(\&quot;telephoneNumber\&quot;,$telephoneNumber)
Write-Host \&quot;$telephoneNumber\&quot;
$objUser.put(\&quot;mail\&quot;,$mail)
Write-Host \&quot;$mail\&quot;
#$objUser.put(\&quot;homePhone\&quot;,$homePhone)
$objUser.put(\&quot;mobile\&quot;,$mobile)
Write-Host \&quot;$mobile\&quot;
# Chemin du profil itinerrant
$objUser.put(\&quot;profilePath\&quot;, \&quot;\\ECH-SRV-02\Partage_DFS\Users_Profiles\%username%\\&quot;«»)
# Chemin de la homedirectory
$objUser.put(\&quot;homeDirectory\&quot;, \&quot;\\ECH-SRV-02\Partage_DFS\Users_Profiles\%username%\\&quot;«»)
# Lettre de la homedirectory
$objUser.put(\&quot;homeDrive\&quot;, \&quot;H:\&quot;«»)
$objUser.SetInfo


#$objUser.setPassword(\&quot;\&quot;«»)
#on ne met pas de mdp pour que l'utilisateur en choisisse un au premier démarrage

#on active le compte
#$objUser.psbase.InvokeSet(\&quot;AccountDisabled\&quot;,$false)
$objUser.SetInfo()

#on vérifie que l'utilisateur est bien créé et on rajoute le résultat dans le fichier ADlog.txt

if(($objOU.Children | where {$_.Path -match \&quot;CN=$cn\&quot;}) -ne $null) {
\&quot;User : \&quot;+$UserPrincipalName+\&quot; Ok\&quot; | Add-Content C:\ADlog.txt
}

$objOU=[ADSI]\&quot;LDAP://localhost:389/DC=activup,DC=local\&quot;

}
Write-Host \&quot;Création réussie!\&quot;

}
else {
\&quot;Failure\&quot; | Add-Content C:\ADlog.txt
}
[/code:1]

ps: je laisse l'en-tête car cet outil qu'il a créé est génial, je n'ai malheureusement pas encore assez de connaissances pour le maîtriser mais ça viendra.

merci pour vos conseils, je vais continuer à venir ici pour m'instruire.


et pour voir si certains peuvent m'aider à fignoler mon script..<br><br>Message édité par: corly, à: 7/12/11 21:17

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

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