Question
Liste des groupes d'un utilisateur
- Guillaume MAISON
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 3
- Remerciements reçus 0
je suis en train de m'intéresser très fortement au PowerShell.
du fait de postes clients ... hasardeux, je suis obligé de transformer certains trucs bien pratiques avec les GPO en scripts... j'ai donc écris quelques cripts en VBScript pour mapper des lecteurs réseaux en fonction de l'appartenance à tel ou tel groupe. Ca marche à la perfection.
Maintenant, j'aimerais pouvoir le faire également en PowerShell.
J'ai trouvé ici les scripts pour lister les utilisateurs d'un groupe mais je n'ai pas trouvé l'autre possibilité avoir les groupes d'un utilisateur (et bien sûr obtenir le nom de l'utilisateur courant)
l'algorithme serait celui-ci (et si ce script fonctionne, je souhaiterait fortement le mettre dans la liste des scripts présents ici :
[code:1]
Récupérer les groupes de l'utilisateur courant
Si Utilisateur.MembreDe.Trouve(Groupe1) Alors
Créer lecteur réseau pour membres du Groupe1
Affecter Imprimante1Groupe1
Affecter Imprimante2Groupe1
Fin Si
Si Utilisateur.MembreDe.Trouve(Groupe2) Alors
Créer lecteur réseau pour membres du Groupe2
Affecter Imprimante1Groupe1
Fin Si
etc...
[/code:1]
Et on pourrait imaginer beaucoup d'autres choses... comme l'exécution automatique de programmes d'installation en fonction de beaucoup de choses.
Voilà
Merci d'avance,
Guillaume
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
J'ai fait un petit script qui je pense répond à ton besoin. Regarde ceci :
[code:1]
# Récupération du nom de l'utilisateur connecté
function QuiEstConnecte
{
$currentuser = [system.security.principal.windowsidentity]::getcurrent()
$name = $currentuser.name.Substring($currentuser.name.lastindexof(\"\\"«»)+1)
return $name
}
function EstDansGroupeNT ([string]$groupe_choisi,$user)
{
$EstDansGroupe = $false
$groupe = ([ADSI]\"LDAP://CN=$($groupe_choisi),OU=Groupes,DC=powershell-scripting,DC=com\"«»)
foreach ($i in $groupe.member)
{
if($i.length -gt 1)
{
$nom_courant = $i.substring(3,$i.IndexOf(\",\"«»)-3)
if ($nom_courant -eq $user)
{
$EstDansGroupe = $true
}
}
}
return $EstDansGroupe
}
### Début du programme
$user = QuiEstConnecte
if ( (EstDansGroupeNT \"Admins du domaine\" $user) -eq $true )
{
Créer lecteur réseau pour membres du Groupe1
Affecter Imprimante1Groupe1
Affecter Imprimante2Groupe1
}
else
{
Faire autre chose
}
[/code:1]
Je l'ai un peu modifié en live pour que ça colle au mieux à ton besoin, dis moi si ça marche
@++
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 ?
Connexion ou Créer un compte pour participer à la conversation.
- Guillaume MAISON
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 3
- Remerciements reçus 0
Bonjour Chtonk et bienvenue à toi sur le forum !
Bonjour et merci pour l'accueil et la réponse !
Mon souci est là, le Name retourné est celui du login.
J'ai fait un petit script qui je pense répond à ton besoin. Regarde ceci :
[code:1]
# Récupération du nom de l'utilisateur connecté
function QuiEstConnecte
{
$currentuser = [system.security.principal.windowsidentity]::getcurrent()
$name = $currentuser.name.Substring($currentuser.name.lastindexof(\"\\"«»)+1)
return $name
}
[/code:1]
Alors qu'ici le nom_courant est le nom complet (prénom + nom). Et il ne le trouve jamais...[code:1]
function EstDansGroupeNT ([string]$groupe_choisi,$user)
{
$EstDansGroupe = $false
$groupe = ([ADSI]\"LDAP://CN=$($groupe_choisi),OU=Groupes,DC=powershell-scripting,DC=com\"«»)
foreach ($i in $groupe.member)
{
if($i.length -gt 1)
{
$nom_courant = $i.substring(3,$i.IndexOf(\",\"«»)-3)
if ($nom_courant -eq $user)
[/code:1]
Je l'ai un peu modifié en live pour que ça colle au mieux à ton besoin, dis moi si ça marche
Arnaud
Et donc j'ai essayé de chercher mais la doc du .Net n'est pas assez orientée opérationnelle, juste une référence.
Je vais continuer de chercher...
Merci pour le coup de main en tout cas !
Cordialement,
Guillaume
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
Si c'est le cas, il faut que tu fasses une requête LDAP auprès d'AD afin de récupérer le champ AD qui t'interesses à partir du nom de l'utilisateur connecté.
Tu peux essayer de te baser sur le script suivant : Récupérer la date de dernière connexion de tous les utilisateurs AD .
Sinon pour ma fonction EstDansGroupe, je crois qu'elle ne marche qu'avec les groupes Globaux (ou alors c'est avec les locaux).
Bon courage, et tiens nous au courant de la suite.
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 ?
Connexion ou Créer un compte pour participer à la conversation.
- Guillaume MAISON
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 3
- Remerciements reçus 0
Je crois bien que j'ai réussi et voici le résultat de mes recherches et tests.
Je rappelle que mon besoin était de savoir, pour l'utilisateur connecté, quels sont ses groupes d'appartenance et en fonction de faire certaines actions. Dans le script ci-dessous, il s'agit tout simplement de créer un lecteur réseau par groupe.
[code:1]
# Récupération du nom de l'utilisateur connecté
function QuiEstConnecte() {
$lCurrentUser = [system.security.principal.windowsidentity]::getcurrent()
$name = $lCurrentUser.name.Substring($lCurrentUser.name.lastindexof(\"\\"«»)+1)
return $name
}
# Détermination si l'utilisateur courant est bien dans le groupe demandé
function EstDansGroupe ([string] $groupechoisi) {
$IsIn = $false
$lCurUser =QuiEstConnecte
$ldapQuery = \"(samaccountname=\"+$lCurUser+\"«»)\"
$de = new-object system.directoryservices.directoryentry
$ads = new-object system.directoryservices.directorysearcher -argumentlist $de,$ldapQuery
$users = $ads.findall()
$user = $users[0]
foreach ($groupe in $user.properties.memberof) {
if (($groupe.tolower()).IndexOf(\"cn=\"+$groupechoisi.tolower()) -ge 0) {
$IsIn=$true
break
}
}
return $IsIn
}
$Compta_Group = \"compta\"
$Compta_Share = \"Compta\"
$Direction_Group = \"direction\"
$Direction_Share = \"Direction\"
$Commun_group = \"commun\"
$Commun_Share = \"Commun\"
$Users_Group = \"users\"
$users_Share = \"Users\"
$Serveur = \"SERVER\"
### Début du programme
$CurrentUser =QuiEstConnecte
$obj = New-Object -com Wscript.Network
if (EstDansGroupe($Compta_group)) {
Write-Host $CurrentUser \" appartient au groupe \" $Compta_Group
$obj.MapNetworkDrive(\"Z:\", \"\\\"+$Serveur+\"\\"+$Compta_Share)
}
if (EstDansGroupe($Direction_group)) {
Write-Host $CurrentUser \" appartient au groupe \" $Direction_Group
$obj.MapNetworkDrive(\"Y:\", \"\\\"+$Serveur+\"\\"+$Direction_Share)
}
if (EstDansGroupe($Commun_group)) {
Write-Host $CurrentUser \" appartient au groupe \" $Commun_Group
$obj.MapNetworkDrive(\"X:\", \"\\\"+$Serveur+\"\\"+$Commun_Share)
}
if (EstDansGroupe($Users_group)) {
Write-Host $CurrentUser \" appartient au groupe \" $Users_Group
$obj.MapNetworkDrive(\"W:\", \"\\\"+$Serveur+\"\\"+$Users_Share+\"\\"+$CurrentUser)
}
[/code:1]
Je rappelle que ce script est donné tel que et ne
saurait engager la responsabilité de son auteur pour une utilisation autre que celle rappelé en début de message.
Beaucoup de choses ne sont pas dépendantes de ce script, comme les droits affectés aux partages, au dossiers et fichiers.
Use des améliorations à apporter serait de ne pas passer par le WScript.Network pour effectuer cette connexion car, si j'ai bien lu je ne sais plus où, le WScript est amené à disparaître non ? au profit de PowerShell ...
Cordialement,<br><br>Message édité par: chtonk, à: 4/06/07 13:35
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
Le plus simple et le plus courant est bien d'utiliser l'objet COM WScript.
Sinon effectivement Microsoft a bien annoncé la mort de VBScript mais pas forcément de WSH, ce sont 2 choses différentes.
Toutefois j'ai trouvé une méthode alternative (100% PowerShell) pour monter un lecteur réseau sur un partage qui peut t'intéresser.
Regarde ici : mow001.blogspot.com/2006/05/powershell-m...ive-of-unc-path.html
Merci pour ta contribution.
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 ?
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Liste des groupes d'un utilisateur