Question Active Dir et powershell

Plus d'informations
il y a 14 ans 11 mois #1112 par Arnaud Petitjean
Salut Mr Renard,

SetInfo est une méthode, il faut donc lui ajouter à la fin des parenthèses. [code:1]$user.setinfo()
[/code:1]

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

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?

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

Plus d'informations
il y a 14 ans 11 mois #1113 par glmrenard
Réponse de glmrenard sur le sujet Re:Active Dir et powershell
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 !

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

Plus d'informations
il y a 14 ans 11 mois #1123 par glmrenard
Réponse de glmrenard sur le sujet Re:Active Dir et powershell
Bonjour,

Comme promis, mes scripts pour ceux que ça intéresse bien sûr.
Creation d'un utilisateur
[code:1]$debug=1 #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 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\"[/code:1]


Suppression d'un utilisateur
[code:1]$username=\"LDAP://cn=$cn,cn=users,dc=mail,dc=strg,dc=arte\"
$user=new-object system.directoryservices.directoryentry $username
$user.PSBase.DeleteTree()[/code:1]

Désactivation d'un utilisateur
[code:1]$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()[/code:1]

Activation d'un utilisateur
[code:1]$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()[/code:1]

Activation webmail
[code:1]$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()[/code:1]

Désactivation webmail
[code:1]$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()[/code:1]

Bonne journée et merci pour votre aide !

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

Plus d'informations
il y a 14 ans 11 mois #1126 par Arnaud Petitjean
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 et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?

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

Plus d'informations
il y a 14 ans 11 mois #1127 par glmrenard
Réponse de glmrenard sur le sujet Re:Active Dir et powershell
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 !

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

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