Flash info

Maître Yoda utilise PowerShell. Cette source encore non confirmée par Obi-Wan Kenobi aurait pour origine une conférence sur la force obscure de CMD. Que le POWERshell soit avec vous...

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Active Dir et powershell - 8/10/07 13:34 Bonjour à tous,

Je souhaiterais me connecter à un AD afin de pouvoir ajouter des users, en supprimer ... Avant d'enfin les modifier à l'aide du snapin exchange (gestion de la messagerie).
Le problème est que je suis incapable de créer un user ni même de me connecter avec un login password.

Grâce à quest et à ses cmdlet AD, c'est bon, j'ai réussi à me connecter, créer un user...
Mais ...Comment faire pour faire la même chose sans quest ?

Merci d'avance pour votre aide car je suis bloqué, j'ai vu une méthode [ADSI], une autre newobject et je suis perdu là dedans ...

une question subsidiaire .. Comment puis-je voir la liste des snapin ?

Merci encore et bravo pour ce site !!
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Dir et powershell - 8/10/07 13:41 As-tu regardé la section Active Directory de la bibliothèque de scripts? Elle regorge d'exemples dont tu devrais pouvoir t'inspirer.

Jette également un oeil aux conservations passées du forum, il y a souvent des questions qui traitent de l'AD.

N'hésite pas à revenir avec une question plus spécifique en cas de problème sur l'utilisation d'un exemple particulier.

Pour ta deuxième question:

get-pssnapin

Janel
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 8/10/07 13:57 Bonjur,

Merci pour ta réponse super rapide !
Je vais poster un exemple des messages d'erreur que j'ai un peu plus tard.
J'avais essayé avec la rubrique scripts justement mais je ne suis arrivé à rien, il n'y a pas d'exemple en changeant de credentials malheureusement...
Merci encore !
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 8/10/07 15:12 Rebonjour

Voilà ce que je fais
$pc=[ADSI]("LDAP://ambre/dc=mail,dc=strg,dc=arte")
$user=$pc.create("user","cn=un test,cn=users,dc=mail,dc=strg,dc=arte")
$user.put("samaccountname","t-un")
$user.setinfo()

Et j'ai une erreur

exception calling setinfo with 0 arguments. The specidief directory service attribute or values does not exist

--> Je ne comprends pas vraiment ce qui se passe et pourquoi ça ne fonctionne pas alors qu'avec les fonctions de quest, pas de problèmes...
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:Active Dir et powershell - 8/10/07 16:34 Bonjour glmrenard,

Il faut que dans ta requete de connexion à AD, tu spécifies l'OU de destination. Il ne faut pas le faire au niveau de la méthode create.

Exemple:
Code:

  $pc=[ADSI]("LDAP://cn=users,dc=mail,dc=strg,dc=arte") $user=$pc.create("user","cn=un test") $user.put("samaccountname","t-un") $user.setinfo()



De plus, j'ai enlevé le nom du serveur dans la requête car en principe il n'est pas nécessaire.

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:Active Dir et powershell - 8/10/07 16:46 Je rebondis sur l'impersonation (technique qui permet de changer de credentials) dont tu parlais dans ton précédent post.

On peut y arriver avec PowerShell et j'enrichirais dans ce sens la bibliothèque dès que j'aurais un petit moment...
Le raccourci [ADSI] ne permet pas d'y avoir accès mais on peut y arriver en faisant directement appel à la classe DirectoryEntry du Framework .Net, comme ceci:

Code:

 $objDomaine = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://cn=users,dc=mail,dc=strg,dc=arte","administrateur","P@ssw0rd") $user=$objDomaine.create("user","cn=un test") $user.put("samaccountname","t-un") $user.setinfo()



Sinon, je n'ai pas encore essayé les commandelettes de Quest, peux tu nous en faire un retour d'expérience (même rapide) ?

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 9/10/07 08:03 Bonjour,

Merci pour vos réponses que je vais m'empresser de tester. Pour les cmdlets de quest :

Code:

 ####### On cherche à ajouter les fonctions quest AD $pssnapin=get-pssnapin $quest=0 foreach ($name in $pssnapin) {   if ($name.name -eq "quest.activeroles.ADmanagement") {$quest=$quest+1;} } if ($quest -eq 0) {Add-PSSnapin quest.activeroles.ADmanagement} ######## Fin des ajouts des fonctions quest AD $pw=convertto-securestring "motdepasse" -asplaintext -force Connect-QADService -service "$PDC" -ConnectionAccount 'arte_exchange\ldapmdp' -ConnectionPassword $pw New-QADUser -name "$cn" -ParentContainer 'cn=users,dc=mail,dc=strg,dc=arte' -SamAccountName "$login" -UserPassword "password" -UserPrincipalName "$login" -DisplayName "$cn" -firstname "$firstname" -lastname "$sn" Enable-QADUser "cn=$cn,cn=users,dc=mail,dc=strg,dc=arte"



cn="nom prénom"

Je n'ai pas encore testé les autres fonctions mais la création de l'utilisateur fonctionne bien

La documentation fournie sur leur site (http://www.quest.com/activeroles-server/arms.aspx) est très bien

Bonne journée à vous et merci encore pour votre site et vos réponses !!

Message édité par: glmrenard, à: 9/10/07 09:05
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 10/10/07 14:22 Merci,

ça a marché, il ne me reste plus qu'à trouver comment faire pour les autres champs (mot de passe ou autre) mais je suppose que c'est pareil !
Si c'est différent, merci de me tenir au courant...

Bonne journée à vous !
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Dir et powershell - 10/10/07 19:02 Pour info, le mot de passe est un cas particulier, il se définit comme suit:

Code:

  $password "P@ssw0rd" $user.SetPassword($password)


Janel
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 11/10/07 07:54 Bonjour Janel,

Et merci, mon user est crée, je le vois dans l'AD mais aucun des paramètres que je lui ai rentré (lastname...) ne sont visibles, et il est toujours en désactivé et je ne trouve pas de fonctions semblable à enable-qaduser (fonction quest).

Je continue mes tests, pourtant je trouve des exemples sur le net (par exemple : http://blogs.technet.com/benp/archive/2007/03/05/benp-s-basic-guide-to-managing-active-directory- objects-with-powershell.aspx) d'ailleurs, tu préconises ADSI ou le new-object ?

Quoi qu'il en soit, merci pour l'aide déjà apportée !
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 11/10/07 09:19 Bonjour,

En fait, après

Code:

 $user.put("displayname","test trois") $user.put("lastname","test")



lorsque je fais un $user.setinfo,
J'obtiens un
exception calling "setinfo" with 0 arguments "the specified directory service attribute or value does not exist"
Mais l'user est crée car je fais un setinfo juste après le put(samaccountname)
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Dir et powershell - 11/10/07 11:13 glmrenard écrit:
... d'ailleurs, tu préconises ADSI ou le new-object ?

Je n'ai pas de préconisation particulière. Chaque style a son avantage: la syntaxe avec [ADSI] est plus concise et sans doute plus intuitive, alors que new-object est plus explicite sur le type d'objet créé.

A mon avis le plus important c'est de savoir que les deux correspondent au même objet sous-jacent. Après, le choix d'une syntaxe ou d'une autre dépendra du contexte et de tes préférences perso.

Janel
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:Active Dir et powershell - 11/10/07 16:13 Salut Mr Renard,

SetInfo est une méthode, il faut donc lui ajouter à la fin des parenthèses.
Code:

 $user.setinfo()



Si ça ne fonctionne toujours pas, vérifie ta requête LDAP, elle ne doit pas être bonne.

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 11/10/07 16:36 Bonjour Arnaud,

En fait je mettais les parenthèses, je ne les ai pas mises dans mon message par oubli car travaillant dans un vlan à part, je ne peux pas faire de copier/coller.

Pour l'instant, mon script me permet de créer, supprimer, activer ou désactiver un user et il fonctionne (enfin !!) parfaitement. Il crée aussi une BAL exchange. Il ne me reste plus qu'à pouvoir activer/désactiver le webmail et ce sera un bon début. Je mettrais les codes sources dans le message quand tout sera bon (demain j'espère !!)

Bonne soirée !
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 12/10/07 08:35 Bonjour,

Comme promis, mes scripts pour ceux que ça intéresse bien sûr.
Creation d'un utilisateur
Code:

 $debug=#Mettre à zéro pour éviter le mode debug et 1 pour l'activer $PDC="ambre" function debug($text#Affiche un text pour aider au debug du script {   if ($debug -eq 1) {write-host "$text" -foregroundcolor white} } #cls #On nettoie l'écran write-host "#######################################" -foregroundcolor green write-host "####  Ajout d'un utilisateur      #####" -foregroundcolor green write-host "#######################################" -foregroundcolor green #On vérifie les arguments if ($args.length -ne 4) {   write-host "Mauvais nombre d'arguments, il en faut 4" -foregroundcolor red   write-host "EX : " -nonewline   write-host "[PS] C:\exploit\script>C:\exploit\script\addUser.ps1 '5000' 'Un Test' 't-un' 'password'" -foregroundcolor yellow   exit 1       } $arteUserID $args[0] $cn $args[1] $login $args[2] $password=$args[3$objectClass=('top','person','organizationalPerson','user') $mDBUseDefaults='TRUE' #Maintenant, on crée les arguments manquants $givenName=$cn.split(" ")[1] if ($login.length -gt 20) {   $samAccountName=$login.substring(0,20) } else {   $samAccountName=$login } $sn=$cn.split(" ")[0] $firstname=$cn.split(" ")[1] $userPrincipalName="$login@mail.strg.arte" $displayName=$cn #On vérifie que les bons arguments soient présents #debug ("***********",$samAccountName,"#",$arteUserID,"#",$cn,"#",$login,"#",$givenname,"#",$sn,"#" ,"$UserPrincipalName") ##Connexion à l'AD $dom=new-object system.directoryServices.directoryEntry("LDAP://cn=users,dc=mail,dc=strg,dc=arte","login","motdepasse") ##Création du user $user=$dom.create("user","cn= $cn") $user.psbase.commitchanges() $user.psbase.invokeset("samaccountname","$login") $user.psbase.commitchanges() $user.psbase.invokeset("arteuserid","$arteuserid") $user.psbase.commitchanges() $user.psbase.invokeset("userprincipalname","$userPrincipalName") $user.psbase.commitchanges() $user.psbase.invokeset("displayname","$cn") $user.psbase.commitchanges() $user.psbase.invokeset("firstname","$firstname") $user.psbase.commitchanges() $user.psbase.invokeset("lastname","$sn") $user.psbase.commitchanges() ##Changement et/ou application du mot de passe $user.setpassword($password) $user.psbase.commitchanges() #Activation du user $user.psbase.invokeset("UserAccountControl",512#2 : désactibvé, toutes les infos sur http://support.microsoft.com/kb/305144/fr $user.psbase.commitchanges() #Création de sa BAL enable-mailbox -identity "mail.strg.arte/Users/$cn" -Alias "$login" -Database "BADIANE\SG1\MB1"




Suppression d'un utilisateur
Code:

 $username="LDAP://cn=$cn,cn=users,dc=mail,dc=strg,dc=arte" $user=new-object system.directoryservices.directoryentry $username $user.PSBase.DeleteTree()



Désactivation d'un utilisateur
Code:

 $username="LDAP://cn=$cn,cn=users,dc=mail,dc=strg,dc=arte" $user=new-object system.directoryservices.directoryentry $username $user.psbase.invokeset("UserAccountControl",2) $user.psbase.commitchanges()



Activation d'un utilisateur
Code:

 $username="LDAP://cn=$cn,cn=users,dc=mail,dc=strg,dc=arte" $user=new-object system.directoryservices.directoryentry $username $user.psbase.invokeset("UserAccountControl",512) $user.psbase.commitchanges()



Activation webmail
Code:

 $username="LDAP://cn=$cn,cn=users,dc=mail,dc=strg,dc=arte" $user=new-object system.directoryservices.directoryentry $username $user.psbase.invokeset("protocolsettings","OWA§1") $user.psbase.commitchanges()



Désactivation webmail
Code:

 $username="LDAP://cn=$cn,cn=users,dc=mail,dc=strg,dc=arte" $user=new-object system.directoryservices.directoryentry $username $user.psbase.invokeset("protocolsettings","OWA§0") $user.psbase.commitchanges()



Bonne journée et merci pour votre aide !
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:Active Dir et powershell - 12/10/07 08:57 Hello,

Très bon scrîpt qui pourra reservir, merci de l'avoir posté .

J'aurais juste quelques remarques pour t'aider à l'améliorer :
1. Au lieu de te faire une fonction Debug, PowerShell gère déjà son propre mécanisme grâce la commandelette "Write-Debug". Pour t'en servir il te suffit d'utiliser Write-Debug comme Write-Host. Et pour activer ce mode Debug, il faut juste que tu change la valeur de la variable $DebugPreference à $DebugPreference="continue". Ce même mécanisme existe aussi pour le mode Verbeux avec Write-Verbose et la variable $VerbosePreference

2. Pour les paramètres, sais tu que tu peux utiliser "param" pour les définir ? C'est hyper pratique et je t'encourage a l'utiliser. Pour avoir des exemples, regarde dans la rubrique du concours de scripting.

3. Il serait bien que tu sortes du code la valeur de ton domaine AD. Ce que je veux dire c'est qu'il faudrait rendre ton script générique pour être utilisé avec d'autres domaines. Tu pourrais par exemple créer un paramètre exprès pour cela. L'idéal serait d'initialiser ce paramètre s'il n'est pas renseigné par le domaine courant. C'est très facile à faire, si tu n'y arrives pas tu sais ou demander de l'aide.

4. Tu n'es pas obligé de faire un commitChanges après chaque spécification de valeurs d'attributs. Tu peux le faire à la fin une fois pour toutes. L'exception est pour la création de l'utilisateur ou il faut le faire une première fois avant de définir ses attributs.

A bientôt,

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
glmrenard
Utilisateur

PowerShelleur Débutant
Messages: 14
graphgraph
Karma: 0  
Re:Active Dir et powershell - 12/10/07 09:24 Merci pour tes conseils, je ferais donc une nouvelle version prochainement en les suivant.
Notamment la partie servant à rendre le script générique, c'est une bonne idée.
Pour le param et le debug, je ne connaissais pas mais je vais bientôt connaître !

Bonne journée !
  | | L'administrateur a désactivé l'accés public en écriture.
© 2020 PowerShell-Scripting.com