2011-09-29 3 views
3

J'essaie d'obtenir une liste de tous les utilisateurs d'une unité d'organisation/de distribution d'AD.Filtre et méthodes DirectoryServices

C'est ce que je suis venu avec:

$erroractionpreference = "SilentlyContinue" 
function Get-GroupMembers { 
    $filter = "(&(objectCategory=person)(objectClass=user))" 
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
    $objSearcher.Filter = $filter 
    $colResults = $objSearcher.FindAll() 

     foreach ($member in $colResults) { 
      $member 
     } 
} 
get-GroupMembers 

Si je change le filtre à

$filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=admin")) 

Rien retourne. Pourquoi est-ce?
Je voudrais également afficher certaines valeurs (si les comptes sont actifs ou désactivés, etc.) mais si je redirige $member vers gm, je n'ai rien.

Toute aide serait grandement appréciée.

+1

Attention @TiZon votre mixez trois choses. Ajk vous explique comment utiliser l'objet ADSI avec DirectorySearcher, cela fonctionne jusqu'à PowerShell V1.0. USlackr utilise des Cmdlets provenant du module ActiveDirectory disponible sur Seven et W2K8R2 sur PowerShell V2.0. Christian utilise Cmdlet provenant d'un paquet Qest disponible depuis PowerShell V1.0. Les 3 solutions fonctionnent mais ne mélangez pas les 3 – JPBlanc

+0

@JPBlanc: Merci pour les heads up! –

Répondre

4

Si vous souhaitez rechercher une unité d'organisation spécifique, vous pouvez le définir comme la racine de votre objet chercheur:

$objOU = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=Admin Accounts,DC=admin") 
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
$objSearcher.SearchRoot = $objOU 

Vous pouvez également contrôler la portée de votre recherche. Voici les deux options les plus pertinentes pour vous:

# Option 1: Return only users in the 'Admin Accounts' OU 
$objSearcher.SearchScope = "OneLevel" 

# Option 2: Return users in the 'Admin Accounts' OU or any level beneath it 
$objSearcher.SearchScope = "SubTree" 

À moins que vous remplacez la racine de recherche et la portée, vous obtiendrez la valeur par défaut d'effectuer une recherche de SubTree contre la racine de votre domaine actuel. Vous trouverez des informations plus détaillées dans cet article TechNet:

Edit: Comme uSlackr noté, votre composant DC n'a pas l'air louche. Je l'ai laissé intact pour mon exemple, mais un nom d'objet de base incomplet/mal formé va botcher votre recherche indépendamment de la méthode que vous utilisez.

+0

Merci, cela a fonctionné! J'ai combiné votre réponse avec l'aide de @uSlackr –

1

Vous pouvez utiliser la quête ActiveRolesManagement Shell pour télécharger ActiveDirectory d'ici:

http://www.quest.com/downloads/

Le paquet est un logiciel gratuit et est cmdlets plus précis pour la gestion Active Directory de Powershell.

4

Le composant DC n'est pas complet. Il devrait ressembler à ceci:

$filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=myco,dc=com")) 

mais dc = admin, dc = com devrait se traduire par de la nomdomaine AD dans cet exemple « admin.com » qui ne semble pas juste

C'est beaucoup plus facile avec les applets de commande Microsoft AD.

get-aduser -filter * -searchbase "ou=test,dc=mycom,dc=com" 

informations sur le téléchargement et l'utilisation des applets de commande est disponible sur TechNet

+0

Merci, cela a fonctionné! J'ai combiné votre réponse avec l'aide de @ajk –