Powershell ADSI
| Fiche express | |
|---|---|
| Domaine | Annuaires (WinNT / LDAP) |
| Accélérateur | [ADSI]
|
| Type .NET | System.DirectoryServices.DirectoryEntry
|
| Voir aussi | Powershell AD module · Module AD |
ADSI (Active Directory Service Interfaces) permet d'interroger et modifier des
annuaires via les fournisseurs WinNT:// (base SAM locale) et
LDAP:// (Active Directory). L'accélérateur PowerShell [ADSI]
retourne un objet .NET System.DirectoryServices.DirectoryEntry.
[ADSI]"WinNT://$machine"
[ADSI]'LDAP://CN=...'
ADSI local (WinNT)
Lister les groupes locaux :
param([string]$machine = '.')
$connexion = [ADSI]"WinNT://$machine"
$connexion.PSBase.Children |
Where { $_.PSBase.SchemaClassName -eq 'group' } |
ForEach { $_.Name }
Lister les membres d'un groupe local :
param([string]$machine = '.',
[string]$groupe = $(Throw 'Nom de groupe obligatoire !'))
$connexion = [ADSI]"WinNT://$machine/$groupe,group"
$connexion.PSBase.Invoke('Members') |
ForEach { $_.GetType().InvokeMember('Name','GetProperty',$null,$_,$null) }
Ajouter / retirer un membre :
$connexion = [ADSI]"WinNT://$machine/$groupe,group"
$connexion.Add("WinNT://$utilisateur")
$connexion.Remove("WinNT://$utilisateur")
Créer / supprimer un groupe local :
$connexion = [ADSI]"WinNT://$machine"
$objGroupe = $connexion.Create('group', $groupe)
$objGroupe.Put('Description', $description)
$objGroupe.SetInfo()
$connexion.Delete('group', $groupe)
Créer un utilisateur local :
$objMachine = [ADSI]"WinNT://$machine"
$objUser = $objMachine.Create('user', $nom)
$objUser.SetPassword($motDePasse)
$objUser.PSBase.InvokeSet('Description', $description)
$objUser.SetInfo()
Désactiver un compte (bit UserFlags) :
$user = [ADSI]'WinNT://./stef,user'
$flags = $user.PSBase.InvokeGet('UserFlags')
$user.PSBase.InvokeSet('UserFlags', $($flags -bor 2))
$user.PSBase.CommitChanges()
ADSI domaine (LDAP / AD DS)
L'objet [ADSI]'LDAP://...' correspond à un
System.DirectoryServices.DirectoryEntry.
# Connexion
$objUser = [ADSI]'LDAP://CN=arnaud,OU=Info,DC=domain,DC=com'
$objDomaine = [ADSI]'LDAP://DC=domain,DC=com'
$objDomaine = [ADSI]'' # domaine courant
$objGC = [ADSI]'GC://DC=domain,DC=com' # forêt (catalogue global)
# Connexion avec identifiants (framework)
$objDomaine = New-Object System.DirectoryServices.DirectoryEntry('LDAP://serveur/DC=domain,DC=com','CompteAdmin','MotDePasse')
Recherche d'objets :
$objRecherche = New-Object System.DirectoryServices.DirectorySearcher([ADSI]'')
$objRecherche.Filter = '(objectCategory=organizationalUnit)'
$objRecherche.FindAll()
$objRecherche.Filter = '(&(objectCategory=person)(objectClass=user))'
$objRecherche.FindAll()
$objRecherche.FindOne() # premier résultat seulement
Créer une OU :
$objDomaine = [ADSI]''
$objOU = $objDomaine.Create('organizationalUnit', 'ou=finance')
$objOU.Put('Description', 'Services financiers')
$objOU.SetInfo()
Créer un groupe (global par défaut) :
$objOU = [ADSI]'LDAP://OU=Informatique,DC=domain,DC=com'
$objGroupe = $objOU.Create('group', 'cn=Responsables Projets')
$objGroupe.Put('samAccountName', 'ResponsablesProjets')
$objGroupe.Put('Description', 'Responsables des projets informatiques')
$objGroupe.SetInfo()
Types de groupe : 2 global, 4 local, 8 universel,
combinés avec le bit de sécurité (2147483648).
Créer un utilisateur (attributs obligatoires : cn, SamAccountName) :
$objOU = [ADSI]'LDAP://OU=Utilisateurs,DC=domain,DC=com'
$objUser = $objOU.Create('user', 'cn=Edouard Bracame')
$objUser.Put('SamAccountName', 'Bracame')
$objUser.Put('UserPrincipalName', 'Bracame@domain.com')
$objUser.SetInfo()
# Le mot de passe s'affecte après la création
$objUser.SetPassword('MotDePasse')
$objUser.SetInfo()
# Activation
$objUser.PSBase.InvokeSet('AccountDisabled', $false)
$objUser.SetInfo()
Manipulation d'attributs :
$objUser.Put('Description', 'Compte utilisateur')
$objUser.SetInfo()
$objUser.Get('Description')
# PutEx : 1=efface le contenu, 2=remplace, 3=ajoute, 4=retire des valeurs
$objUser.PutEx(2, 'TelephoneNumber', @('0102030405'))
$objUser.PutEx(4, 'OtherTelephone', @('0102030406'))
$objUser.SetInfo()
Supprimer un utilisateur :
$objOU = [ADSI]'LDAP://OU=Utilisateurs,DC=domain,DC=com'
$objOU.Delete('user', 'CN=Stephane Marcel')
Voir aussi
- Powershell AD module — cmdlets AD de haut niveau
- Module AD
- PSObject