2014-05-15 7 views
0

J'essaie de localiser les appartenances à un groupe pour un compte d'utilisateur spécifié. Le compte d'utilisateur d'un domaine est souvent membre d'un groupe dans les autres domaines (certains domaines nécessitent un compte administrateur différent). À l'aide de get-QAQgroup, je peux rechercher chaque domaine individuellement, mais lorsque je tente de parcourir les domaines, je ne trouve que les résultats dans le domaine auquel je suis connecté. #Script pour modifier les domaines et rechercher des appartenances à un groupe pour un compte d'utilisateur spécifié. Lorsque j'exécute le script, j'obtiens des résultats pour dom1 (domaine auquel je suis connecté) et le reste lance les erreurs suivantes. Je ne sais pas pourquoi les lignes "Ref 1: .." pointent vers "dom1". Je pensais que cela pourrait être la source de problème. J'ai copié la sortie de Powershell ci-dessous montrant les messages d'erreur.Powershell se connecter et rechercher plusieurs domaines

In the domain dom1.ad.state.company.com dom1\brownd2.admin.dom1 is a direct member of... 

Name                                    
----                                   
DOM1-G-ITS-DS-Company Services                             
DOM1PGUELFP00003-Exmerge-R                             
DOMPGUELFP00003-Exmerge-C                             
ITSPPTBOSHFS003-FSSHARE-C                             
Domain Users                                 

In the domain dom2.ad.state.company.com dom1\brownd2.admin.dom1 is a direct member of... 
Get-QADGroup : 0000202B: RefErr: DSID-03100742, data 0, 1 access points 
    ref 1: 'dom1.ad.state.company.com' 
At C:\TestScripts\tGet-UserAllMemberships.ps1:24 char:6 
+  Get-QADGroup -service $domain -Credential $cred -Containsmember $userAcc | ... 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Get-QADGroup], DirectoryAccessException 
    + FullyQualifiedErrorId : Quest.ActiveRoles.ArsPowerShellSnapIn.DirectoryAccess.DirectoryAccessException,Quest.ActiveRoles.ArsPowerShel 
    lSnapIn.Powershell.Cmdlets.GetGroupCmdlet 

In the domain dom3.ad.state.company.com dom1\brownd2.admin.dom1 is a direct member of... 
Get-QADGroup : 0000202B: RefErr: DSID-03100742, data 0, 1 access points 
    ref 1: 'dom1.ad.state.company.com' 
At C:\TestScripts\tGet-UserAllMemberships.ps1:24 char:6 
+  Get-QADGroup -service $domain -Credential $cred -Containsmember $userAcc | ... 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Get-QADGroup], DirectoryAccessException 
    + FullyQualifiedErrorId : Quest.ActiveRoles.ArsPowerShellSnapIn.DirectoryAccess.DirectoryAccessException,Quest.ActiveRoles.ArsPowerShel 
    lSnapIn.Powershell.Cmdlets.GetGroupCmdlet 

Il existe un ensemble d'erreurs similaire pour chaque domaine que je vérifie. Je n'ai pas posté la liste complète des messages d'erreur.

Si je change l'ordre des domaines dans le tableau, les erreurs et les résultats du domaine réussi changent juste l'ordre pour correspondre au tableau. Je pensais que cela pourrait juste avoir du succès pour la première itération de la boucle. Pas le cas cependant.

Je sais que le compte est membre de groupes dans Dom2 et non de groupes dans Dom3. Si je sors les commandes de la boucle foreach et que je lance une action individuelle pour chaque domaine de la console, j'obtiens les résultats attendus. Sur la base des résultats individuels, j'avais pensé que ce serait un exemple simple à faire en boucle, mais je ne me connecte pas correctement aux domaines.

Que puis-je changer?

+0

Quelle est votre version de PowerShell? Sont tous domaine dans la même forêt? Envisagez-vous d'utiliser le catalogue global? – JPBlanc

+0

Powershell est la version 4. Oui, tous dans la même forêt, il existe un domaine parent (racine) avec plusieurs domaines enfants. En ce qui concerne le catalogue global, je ne suis pas sûr de savoir comment appliquer une solution en l'utilisant. – Decorius

Répondre

0

Voici une solution utilisant l'espace de noms System.DirectoryServices.AccountManagement, adapté à PowerShell à partir du code C#. C'est une sorte de solution récursive. Dans Find Recursive Group Membership (Active Directory) en utilisant C#, je donne une solution récursive (en utilisant l'ADSI basique disponible à partir de PowerShell 1.0) qui fonctionne également avec les groupes de distribution.

# Retreiving a principal context for the administrator on the Global Catalog 
Add-Type -AssemblyName System.DirectoryServices.AccountManagement 
$domainContext = New-Object DirectoryServices.AccountManagement.PrincipalContext([DirectoryServices.AccountManagement.ContextType]::Domain, "VMESS01:3268" , "administrator", "adminPasswd") 
# Retreive the groups 
try { 
    $userPrincipal = [DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($domainContext, "jpb") 
    $groups = $userPrincipal.GetAuthorizationGroups() 
    foreach($group in $groups) 
    { 
    $group.name; 
    } 
} 
finally { 
    $pc.domainContext() 
} 
Questions connexes