none
Rechercher tout les groupes d'un utilisateurs RRS feed

Réponses

  • Pour utiliser les options d'authentification, il faut utiliser le constructeur prenant en compte l'authentification voir ce lien (le 5eme).

    Il s'utilise de cette façon :

     

    $dom = New-Object System.DirectoryServices.DirectoryEntry -ArgumentList 'LDAP://192.168.0.150:389/DC=Think-MS,DC=lan','administrateur','P@ssw0rd',([System.DirectoryServices.AuthenticationTypes]::FastBind)<br/>
    

    ou en passant par une variable :

    $auth = ([System.DirectoryServices.AuthenticationTypes]::FastBind)
    $dom = New-Object System.DirectoryServices.DirectoryEntry -ArgumentList 'LDAP://192.168.0.150:389/DC=Think-MS,DC=lan','administrateur','P@ssw0rd',$auth
    

    Bien Cordialement, Richard Lazaro.

     

    • Marqué comme réponse patmarti lundi 9 janvier 2012 09:54
    lundi 9 janvier 2012 09:52
  • Bonjour à toi,

    Tout d'abord, il faut s'avoir que la cmdlet Get-ADGroupMember fait partie du module ActiveDirectory de PowerShell v2. Or vous passez via l'ADSI, il faut donc tout coder à la main.

    Vous voulez récupérer tous les utilisateurs et savoir si ils appartiennent à un groupe spécifique ?

    Pour cela, si l'utilisateur est dans au moins un groupe, une propriété memberof sera créée.

    Vous pourrez y accéder de cette façon :

    $objResult | ForEach-Object {
        $_.Properties.memberof
    }<br/>
    

    Cette propriété contient un tableau, pour vérifier si un groupe est contenu dans cette liste, il est possible d'utiliser l'opérateur -contains

    $objResult | ForEach-Object {
        if($_.Properties.memberof -contains 'DistinguishedName du GRP') {
            #Action a effectuer
        }
    }
    

    Bien Cordialement, Richard Lazaro.

     

     

    • Marqué comme réponse patmarti jeudi 5 janvier 2012 10:55
    jeudi 5 janvier 2012 10:51
  • En quoi c'est une erreur ?
    La commande que vous citez permet d'intancier un objet de recherche pour interroger votre container spécifié dans $objDomaine.

    Votre code complet serait :

    $objDomaine = [adsi]"LDAP://Server:Port/DC=XXX,DC=YYY,DC=ZZZ","CompteConnexion","MDP"
    $objRecherche = new-object system.DirectoryServices.DirectorySearcher($objDomaine)
    $objRecherche.Filter="(&(objectCategory=user)(objectClass=user))"
    $objResult = $objRecherche.FindAll()
    $objResult | ForEach-Object {
        if($_.Properties.memberof -contains 'CN=AAA,OU=BBB,DC=XXX,DC=YYY,DC=ZZZ') {
            #Action a effectuer
        }
    }
    
    Bien Cordialement, Richard Lazaro.

    jeudi 5 janvier 2012 12:38
  •  

    Bonjour,

     

    Merci de partager votre solution avec vous.

    Vous trouverez un exemple par Ed Wilson: http://blogs.technet.com/b/heyscriptingguy/archive/2009/10/08/hey-scripting-guy-october-8-2009.aspx 

     

    Get-UsersGroupMemberShips.ps1
     
    Function New-Underline($Text)
    {
      "`n$Text`n$(`"-`" * $Text.length)"
    } #end New-UnderLine
    
    Function Test-DotNetFrameWork35
    {
     Test-path -path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5'
    } #end Test-DotNetFrameWork35
    
    Function Get-UserPrincipal($cName, $cContainer, $userName)
    {
     $dsam = "System.DirectoryServices.AccountManagement" 
     $rtn = [reflection.assembly]::LoadWithPartialName($dsam)
     $cType = "domain" #context type
     $iType = "SamAccountName"
     $dsamUserPrincipal = "$dsam.userPrincipal" -as [type]
     $principalContext = new-object "$dsam.PrincipalContext"($cType,$cName,$cContainer)
     $dsamUserPrincipal::FindByIdentity($principalContext,$iType,$userName)
    } # end Get-UserPrincipal
    
    # *** Entry Point to Script ***
     
    
    
    If(-not(Test-DotNetFrameWork35)) { “Requires .NET Framework 3.5” ; exit }
     
    [string]$userName = "bob"
    [string]$cName = "NWTraders"
    [string]$cContainer = "dc=nwtraders,dc=com"
    
    $userPrincipal = Get-UserPrincipal -userName $userName -cName $cName -cContainer $cContainer
    
    New-UnderLine -Text "Direct Group MemberShip:"
    $userPrincipal.getGroups() | foreach-object { $_.name }
    
    New-UnderLine -Text "Indirect Group Membership:"
    $userPrincipal.GetAuthorizationGroups()  | foreach-object { $_.name }
    
    

    Cordialement,

    Roxana


    Roxana PANAIT, MSFT       Join TechNetFr on Viadeo   Votez! Appel à la contribution
    Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.


    jeudi 5 janvier 2012 10:39

Toutes les réponses

  •  

    Bonjour,

     

    Merci de partager votre solution avec vous.

    Vous trouverez un exemple par Ed Wilson: http://blogs.technet.com/b/heyscriptingguy/archive/2009/10/08/hey-scripting-guy-october-8-2009.aspx 

     

    Get-UsersGroupMemberShips.ps1
     
    Function New-Underline($Text)
    {
      "`n$Text`n$(`"-`" * $Text.length)"
    } #end New-UnderLine
    
    Function Test-DotNetFrameWork35
    {
     Test-path -path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5'
    } #end Test-DotNetFrameWork35
    
    Function Get-UserPrincipal($cName, $cContainer, $userName)
    {
     $dsam = "System.DirectoryServices.AccountManagement" 
     $rtn = [reflection.assembly]::LoadWithPartialName($dsam)
     $cType = "domain" #context type
     $iType = "SamAccountName"
     $dsamUserPrincipal = "$dsam.userPrincipal" -as [type]
     $principalContext = new-object "$dsam.PrincipalContext"($cType,$cName,$cContainer)
     $dsamUserPrincipal::FindByIdentity($principalContext,$iType,$userName)
    } # end Get-UserPrincipal
    
    # *** Entry Point to Script ***
     
    
    
    If(-not(Test-DotNetFrameWork35)) { “Requires .NET Framework 3.5” ; exit }
     
    [string]$userName = "bob"
    [string]$cName = "NWTraders"
    [string]$cContainer = "dc=nwtraders,dc=com"
    
    $userPrincipal = Get-UserPrincipal -userName $userName -cName $cName -cContainer $cContainer
    
    New-UnderLine -Text "Direct Group MemberShip:"
    $userPrincipal.getGroups() | foreach-object { $_.name }
    
    New-UnderLine -Text "Indirect Group Membership:"
    $userPrincipal.GetAuthorizationGroups()  | foreach-object { $_.name }
    
    

    Cordialement,

    Roxana


    Roxana PANAIT, MSFT       Join TechNetFr on Viadeo   Votez! Appel à la contribution
    Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.


    jeudi 5 janvier 2012 10:39
  • Bonjour à toi,

    Tout d'abord, il faut s'avoir que la cmdlet Get-ADGroupMember fait partie du module ActiveDirectory de PowerShell v2. Or vous passez via l'ADSI, il faut donc tout coder à la main.

    Vous voulez récupérer tous les utilisateurs et savoir si ils appartiennent à un groupe spécifique ?

    Pour cela, si l'utilisateur est dans au moins un groupe, une propriété memberof sera créée.

    Vous pourrez y accéder de cette façon :

    $objResult | ForEach-Object {
        $_.Properties.memberof
    }<br/>
    

    Cette propriété contient un tableau, pour vérifier si un groupe est contenu dans cette liste, il est possible d'utiliser l'opérateur -contains

    $objResult | ForEach-Object {
        if($_.Properties.memberof -contains 'DistinguishedName du GRP') {
            #Action a effectuer
        }
    }
    

    Bien Cordialement, Richard Lazaro.

     

     

    • Marqué comme réponse patmarti jeudi 5 janvier 2012 10:55
    jeudi 5 janvier 2012 10:51
  • Bonjour et merci pour toutes ces réponse ,

    Mon erreur et de me servire de la commande

    $objRecherche = new-object system.DirectoryServices.DirectorySearcher($objDomaine)

    De ce fait je creer les objet et je n'arrivé pas a avoir les propriétés.J'ai donc enlevé cette commande depuis je récupére toutes les infos.

    Il me faut maintenant les traités.

    Merci vraiment pour tout


    Merci de votre aide
    jeudi 5 janvier 2012 10:55
  • En quoi c'est une erreur ?
    La commande que vous citez permet d'intancier un objet de recherche pour interroger votre container spécifié dans $objDomaine.

    Votre code complet serait :

    $objDomaine = [adsi]"LDAP://Server:Port/DC=XXX,DC=YYY,DC=ZZZ","CompteConnexion","MDP"
    $objRecherche = new-object system.DirectoryServices.DirectorySearcher($objDomaine)
    $objRecherche.Filter="(&(objectCategory=user)(objectClass=user))"
    $objResult = $objRecherche.FindAll()
    $objResult | ForEach-Object {
        if($_.Properties.memberof -contains 'CN=AAA,OU=BBB,DC=XXX,DC=YYY,DC=ZZZ') {
            #Action a effectuer
        }
    }
    
    Bien Cordialement, Richard Lazaro.

    jeudi 5 janvier 2012 12:38
  • Encore une petite chose,

    comme c'est une base adlds, il me faut dire le type d'authentification, donc j'ai le probléme suivant :

    Exception calling "FindAll" with "0" argument(s): "The specified directory service attribute or value does not exist.
    "
    At C:\Users\Administrator\Documents\Powershell\presque.ps1:8 char:35
    + $objResult = $objRecherche.FindAll <<<< ()
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException
     

    $objDomaine = [adsi]"LDAP://Server:Port/DC=XXX,DC=YYY,DC=ZZZ","CompteConnexion","MDP"
    $objRecherche = new-object system.DirectoryServices.DirectorySearcher($objDomaine)
     
    $objRecherche =[System.DirectoryServices.AuthenticationTypes]::FastBind
    $objRecherche.Filter="(&(objectCategory=user)(objectClass=user))"
    $objResult = $objRecherche.FindAll()
    $objResult | ForEach-Object {
        if($_.Properties.memberof -contains 'CN=AAA,OU=BBB,DC=XXX,DC=YYY,DC=ZZZ') {
            #Action a effectuer
        }
    }
    
    J'utilise bien le reste et cela fonctionne trés bien sur une base ad.
    Mais sur une base ADAM, le mot de passe ce retrouve dans PropetiesToLoad.
    Est-ce normal?
    CacheResults             : True
    ClientTimeout            : -00:00:01
    PropertyNamesOnly        : False
    Filter                   : (&(objectCategory=user)(objectClass=user))
    PageSize                 : 0
    PropertiesToLoad         : {MDP}
    ReferralChasing          : External
    SearchScope              : Subtree
    ServerPageTimeLimit      : -00:00:01
    ServerTimeLimit          : -00:00:01
    SizeLimit                : 0
    SearchRoot               : System.DirectoryServices.DirectoryEntry
    Sort                     : System.DirectoryServices.SortOption
    Asynchronous             : False
    Tombstone                : False
    AttributeScopeQuery      :
    DerefAlias               : Never
    SecurityMasks            : None
    ExtendedDN               : None
    DirectorySynchronization :
    VirtualListView          :
    Site                     :
    Container                :

    Merci de votre aide
    vendredi 6 janvier 2012 10:04
  • Bonjour,

    Désolé pour le temps de réponse mais j'ai du me monter un Server 2003 x86 ainsi qu'un ADAM.

    De mon côté ce code fonctionne parfaitement :

    $dom = New-Object System.DirectoryServices.DirectoryEntry -ArgumentList 'LDAP://192.168.0.150:389/DC=Think-MS,DC=lan','administrateur','P@ssw0rd'
    
    $ou = $dom.Create("organizationalUnit","OU=PowerShell")
    $ou.SetInfo()
    
    $search = New-Object System.DirectoryServices.DirectorySearcher $dom
    $search.Filter = '(objectClass=organizationalUnit)'
    $search.PageSize = 500
    $search.SizeLimit = 500
    $search.FindAll()
    
    Bien Cordialement, Richard Lazaro.

    vendredi 6 janvier 2012 13:45
  • Bonjour,

    Cela ne fonctionne pas, lorsque je me sert de la console EditeurADSI, je suis obligé de précisé que ma connexion est une Authentification de liaison simple sinon je ne peux me connecté.

    Avez-vous testé avec les même restrictions?

    Merci


    Merci de votre aide
    lundi 9 janvier 2012 08:01
  • Pour utiliser les options d'authentification, il faut utiliser le constructeur prenant en compte l'authentification voir ce lien (le 5eme).

    Il s'utilise de cette façon :

     

    $dom = New-Object System.DirectoryServices.DirectoryEntry -ArgumentList 'LDAP://192.168.0.150:389/DC=Think-MS,DC=lan','administrateur','P@ssw0rd',([System.DirectoryServices.AuthenticationTypes]::FastBind)<br/>
    

    ou en passant par une variable :

    $auth = ([System.DirectoryServices.AuthenticationTypes]::FastBind)
    $dom = New-Object System.DirectoryServices.DirectoryEntry -ArgumentList 'LDAP://192.168.0.150:389/DC=Think-MS,DC=lan','administrateur','P@ssw0rd',$auth
    

    Bien Cordialement, Richard Lazaro.

     

    • Marqué comme réponse patmarti lundi 9 janvier 2012 09:54
    lundi 9 janvier 2012 09:52
  • Super cela marche merci.
    Merci de votre aide
    • Proposé comme réponse Anthon833 vendredi 13 janvier 2012 12:08
    • Non proposé comme réponse Anthon833 vendredi 13 janvier 2012 12:08
    • Proposé comme réponse Anthon833 vendredi 13 janvier 2012 12:29
    • Non proposé comme réponse Anthon833 vendredi 13 janvier 2012 12:29
    lundi 9 janvier 2012 09:54