(NDA : Malheureusement cet article est un peu obsolète aujourd'hui. Je vais préparer un nouvel article avec le résumé des commandes AD actuelles.)
Il existe différentes façons d'interroger l'Active Directory en PowerShell. Dans cet article, j'utilise l'extension de commande de Quest pour manipuler l'AD.
Edit : A l’époque ou j'ai rédigé cet article, Quest était une très bonne alternative aux commandes natives disponibles sous PowerShell. Evidement, aujourd'hui en 2018 les systèmes Windows Serveurs AD intègre cela très bien sans avoir à passer par cet extension.
Il existe différentes façons d'interroger l'Active Directory en PowerShell. Dans cet article, j'utilise l'extension de commande de Quest pour manipuler l'AD.
Edit : A l’époque ou j'ai rédigé cet article, Quest était une très bonne alternative aux commandes natives disponibles sous PowerShell. Evidement, aujourd'hui en 2018 les systèmes Windows Serveurs AD intègre cela très bien sans avoir à passer par cet extension.
Installation
1) Allez sur le site de Quest "www.quest.com/powershell/activeroles-server.aspx"
2) Cliquez sur la case à cocher "I have read and accept the agreement".
3) Téléchargez la dernière version de "ActiveRoles Management Shell for AD".
4) Et installez l'extension.
(La documentation pdf est plutôt bien fait. N'hésitez pas à la consulter.)
Liste des groupes d'un utilisateur (méthode alternatif)
Normalement Quest propose la fonction "Get-QADMemberOf" pour réaliser cette action. Malheureusement lorsque cette commande rencontre un groupe d'un domaine qui ne vous est pas accessible, elle s'arrête avec une erreur et ne retourne rien. Si vous rencontrez ce problème, je vous propose de passer par le script suivant :
#Chargement des commandes Quest.
Add-psSnapin quest.activeroles.admanagement
#Compte de connexion à l'AD.
$username = "DOMAINE\login.admin"
#Invite de saisi du mot de passe.
$password = read-host ("Password pour "+$username) -assecurestring
#Credential.
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
#Connexion à l'AD
$AD1 = Connect-QADService -service "domain.sekki.fr" -Credential $cred
#Affiche les groupes de l'utilisateur au format "Domain\Groupe".
$user = "DOMAINE\login.user"
Get-QADUser $user | foreach {
foreach ($mof in $_.MemberOf)
{
#Initialise.
$grp = "";$dom = "";
#Converti les données séparées par une virgule en tableau.
$tmof = $mof.split(",")
#Recupère le nom du groupe.
foreach($e in $tmof) { if ($e -like "CN=*") {$grp = $e;break} }
#Récupère le nom du domaine du groupe.
foreach($e in $tmof) { if ($e -like "DC=*") {$dom = $e;break} }
#Supprime les infos initules.
$grp = $grp.Replace("CN=","")
$dom = $dom.Replace("DC=","")
#Recompose le nom du groupe au format "Domain\Groupe".
$groupe = $dom+"\"+$grp
#Affiche le nom du groupe.
write-host $groupe
}
}
#Déconnexion de l'AD.
Disconnect-QADService -connection $AD1
#Fin.
Add-psSnapin quest.activeroles.admanagement
#Compte de connexion à l'AD.
$username = "DOMAINE\login.admin"
#Invite de saisi du mot de passe.
$password = read-host ("Password pour "+$username) -assecurestring
#Credential.
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
#Connexion à l'AD
$AD1 = Connect-QADService -service "domain.sekki.fr" -Credential $cred
#Affiche les groupes de l'utilisateur au format "Domain\Groupe".
$user = "DOMAINE\login.user"
Get-QADUser $user | foreach {
foreach ($mof in $_.MemberOf)
{
#Initialise.
$grp = "";$dom = "";
#Converti les données séparées par une virgule en tableau.
$tmof = $mof.split(",")
#Recupère le nom du groupe.
foreach($e in $tmof) { if ($e -like "CN=*") {$grp = $e;break} }
#Récupère le nom du domaine du groupe.
foreach($e in $tmof) { if ($e -like "DC=*") {$dom = $e;break} }
#Supprime les infos initules.
$grp = $grp.Replace("CN=","")
$dom = $dom.Replace("DC=","")
#Recompose le nom du groupe au format "Domain\Groupe".
$groupe = $dom+"\"+$grp
#Affiche le nom du groupe.
write-host $groupe
}
}
#Déconnexion de l'AD.
Disconnect-QADService -connection $AD1
#Fin.