Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1381 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [powershell] recherche global catalog [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[powershell] recherche global catalog [résolu]

n°2221824
misato
Clavicula Nox
Posté le 07-03-2014 à 15:44:52  profilanswer
 

Bonjour,
 
je cherche à faire des recherches dans active directory via requetes LDAP.
 
j'ai une foret avec plein de domaines (15+) au meme niveau hiérarchique, cad :
DC=domaine1,DC=boite,DC=fr
DC=domaine2,DC=boite,DC=fr
...
DC=domaine10,DC=boite,DC=fr
 
on a souvent des utilisateurs qui ont besoin d'accéder aux memes ressources sur les différents domaines.
ils ont donc des comptes type :
CN=martin dupont admin,OU=administrateur,DC=domaine1,DC=boite,DC=fr
CN=martin dupont admin,OU=administrateur,DC=domaine2,DC=boite,DC=fr
etc.
 
actuellement, je fais des recherches ldap en me connectant sur chaque domaine pour chercher le CN ou le samaccountname
style :

Code :
  1. $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
  2. $objSearcher.PageSize = 100 # j'en cherche pas beaucoup, logiquement 1 par domaine en tout.
  3. $objSearcher.SearchScope = "Subtree" # puisqu'il faut aller les chercher dans l'OU "administrateur"
  4. $objSearcher.Filter = "(&(objectcategory=user)(cn=martin dupont admin))" # le CN est par défaut un attribut inclus dans le GC
  5. # là en gros je fais un foreach ($domaine in $liste_des_domaines) pour me faciliter un peu la vie mais j'aimerais éviter de lancer 50 recherches quoi :o
  6. $srchroot = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://DC=domaine1,DC=boite,DC=fr" ) # je vous épargne la version complète en authentification sécurisée
  7. $objSearcher.SearchRoot = $srchroot
  8. $colResults = $objSearcher.FindAll()
  9. foreach ($user in $colresults)
  10. {
  11. write-host $user.properties.distinguishedname
  12. # et d'autres trucs que je balance dans un CSV par exemple
  13. }


 
mon problème :
 
si je m'amuse à faire une connexion GC comme ça :
$srchroot = New-Object System.DirectoryServices.DirectoryEntry("GC://DC=domaine1,DC=boite,DC=fr" )
et en précisant :
$objsearcher.referralchasing = "all" # pour qu'il continue en se connectant à la référence renvoyée par la 1e recherche :o / j'ai lu que "all" n'est pas pris en charge par certains types de recherche, mais meme chose en utilisant "external" qui est le seul qui nous intéresse réellement : se connecter à la référence renvoyée si elle est externe au contexte de nommage actuel ...
 
il ne me renvoie que mon user dans domaine1, sans aller me chercher les autres (c'est pourtant l'intéret d'une recherche GC, non :d ?)
 
cad que si je lui demande $colresults.count, il me renvoie 1 et le findall() me provoque pas d'erreurs.
 
si j'essaye de me connecter en utilisant "GC://DC=boite,DC=fr", il m'envoie chier à la connexion
si j'essaye de me connecter en utilisant domaine2, il ne me renvoie que l'utilisateur sur domaine2, etc.
 
ya quoi que j'oublie de faire et qu'ils passent sous silence dans la littérature :o ?
 
je précise que je lance mes scripts en faisant un get-credential avec mes identifiants admin, et que je préfère passer par powershell sur mon poste et pas sur les serveurs, donc pas d'extensions powershell pour gérer l'AD. (c plus pratique pour gérer les fichiers et faire des traitements potentiellement "lourds" sur les données sans me poser la question de savoir si le serveur a pas autre chose à faire :))
 
si quelqu'un a une idée :D ? moi j'ai rien trouvé en épluchant les pages de résultats google parce que la recherche est très vague et ramène des tas de trucs qu'ont rien à voir :/
merci :)


Message édité par misato le 14-03-2014 à 13:03:54

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
mood
Publicité
Posté le 07-03-2014 à 15:44:52  profilanswer
 

n°2221872
misato
Clavicula Nox
Posté le 08-03-2014 à 14:41:05  profilanswer
 

personne n'a une idée :sweat: ?


---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
n°2222058
misato
Clavicula Nox
Posté le 11-03-2014 à 12:46:43  profilanswer
 

bon, alors soit je galère et je suis pas le seul, soit ma question est stupide, ou quoi :heink: ?


---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
n°2222189
bath66
@#!
Posté le 12-03-2014 à 23:25:03  profilanswer
 

Tu a essayé un truc dans ce gout là http://www.happysysadm.com/2013/03 [...] shell.html ?
L’accélérateur semble etre de base dans powershell, tu fais ton interrogation GC avec le filter qui va bien et après tu parses le tableau de résultat.
 
Après j'ai quand même du mal à voir ce qui t’empêche de faire un Import-module, me semble pas qu'on soit obligé d’être sur un OS serveur pour faire ca.  [:transparency]
Et ca te simplifierai pas mal la vie, car les p'tits gars de chez MS ont justement développer le module pour ca.  :D  
D'après http://technet.microsoft.com/fr-fr [...] .10).aspx:
If you want to use the Module Active Directory in Windows 7 to remotely manage an Active Directory domain, an AD LDS instance or configuration set, or an Active Directory Database Mounting Tool instance, you must have at least one Windows Server 2008 R2 domain controller in your domain or at least one instance in an AD LDS configuration set that is running on a Windows Server 2008 R2 server.
Peut-etre pas de 2008R2 sur tes domaines ?  [:fabien27]


---------------
La violence est le dernier refuge de l'incompétence (Isaac ASIMOV, Fondation).
n°2222216
misato
Clavicula Nox
Posté le 13-03-2014 à 12:02:42  profilanswer
 

je ne suis pas seul  [:shimay:1] , merci !

 

pour w2K8R2, on en a. pas forcément en niveau de fonctionnalité 2008 mais on a du 2008R2, ça ouais.

 

après, moi je créé des comptes (ou je les cherche pour les modifier "en masse", justement :)), j'ai pas toujours la vision de comment est configuré tout le reste :o (ce qui facilite pas le fait de trouver comment faire une recherche GC :o)

 

bon, en fait je crois etre déjà tombé sur la page de happysysadm.com
quand je fais le "getcurrentdomain()" au début, j'obtiens un truc style :
$dom =
forest = "domaine où j'ai pas d'accès".boite.fr
...
name = domaineinfo.boite.fr

 

si j'essaye de faire $root = [ADSI]"GC://$($dom.Name)", j'ai une erreur 0x8000500c (qui retourne rien de concluant coté code d'erreur ... :gratgrat: )

 

et si je me bidouille un truc pour que ça marche ([ADSI]"GC://dc=domaineinfo,dc=boite,dc=fr" ), je me retrouve au point de départ : il me donne qu'un seul résultat venant du domaine "domaineinfo"

 

[:ideenoire]

 

et pourtant, ça m'empèche pas d'arriver à faire des recherches "entire directory" dans la console AD ...


Message édité par misato le 13-03-2014 à 12:11:50

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
n°2222225
bath66
@#!
Posté le 13-03-2014 à 13:39:31  profilanswer
 

OK, Je suis pas au taff aujourd'hui mais demain je vais essayer de voir ce que je peux trouver, me semble qu'on a les mêmes problématiques multi-domaines en foret.
Ton objectif c'est de générer dynamiquement la liste des domaines quitte à virer ton foreach ou vraiment de tout faire avec un oneliner qui claque ?   :D
Si c'est la première partie, ptet qu'il y a une piste coté DNS ?  [:transparency]


---------------
La violence est le dernier refuge de l'incompétence (Isaac ASIMOV, Fondation).
n°2222253
misato
Clavicula Nox
Posté le 13-03-2014 à 16:34:14  profilanswer
 

non, je veux en gros virer mon foreach ou éviter de faire les itérations si il manque la moitié des domaines.

 

en fait la recherche n'est que la première étape d'un script qui me copie les comptes.
accessoirement je peux aussi faire des recherches pour autre chose, en fonction d'un UAC ou d'un type de samaccountname, et j'aimerais pouvoir le faire en une fois sur tous les domaines.

 

le faire en powershell v1 me permet aussi de comprendre comment ça marche :D

 


Message édité par misato le 13-03-2014 à 16:35:51

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
n°2222312
bath66
@#!
Posté le 14-03-2014 à 11:37:38  profilanswer
 

D'après ce que j'ai pu lire a droit et à gauche, le GC ne contient qu'un subset des attributs LDAP.
Donc du coup pour certains attributs, j'ai l'impression que tu seras quand même obligé de faire du foreach.  [:transparency]  
 
J'ai trouvé ce truc là du coup (http://blog.vertigion.com/post/17222808752/powershell-search-across-multiple-domains-in-a-forest):

Citation :

$forestName = ([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()).Name
$ADsPath = [ADSI]"GC://$forestName"
$Search = New-Object System.DirectoryServices.DirectorySearcher($ADsPath)
$Search.Filter = "(&(objectCategory=User)(SamAccountName=toto123)"
$Search.FindAll()


 
Qui semble donner des résultats plutôt intéressants ici, pas chez toi ?
En cherchant du coté des attribtus de ([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()) aussi.
Ici on est en trust relationship avec d'autres domaines, mais j'ai pas la liste des autres domaines du trust dans l'objet retourné, étrange.


---------------
La violence est le dernier refuge de l'incompétence (Isaac ASIMOV, Fondation).
n°2222319
misato
Clavicula Nox
Posté le 14-03-2014 à 12:42:50  profilanswer
 

tout à fait, voir la liste ici :
http://msdn.microsoft.com/en-us/li [...] 85%29.aspx

 

me semble que c modifiable suivant la config voulue dans une certaine mesure, ya une façon de faire une requete pour justement avoir la liste des attributs du GC.

 

moi mon problème est de pas avoir à faire un foreach sur 10, 20 ou 30 domaines quand ya que 2 domaines qui m'intéressent.

 

style requete GC sur le samaccountname ou le commonname ou le surname (SN, nom de famille), qui sont des attributs GC par défaut : je fais la requete sur toute ma foret, il me trouve 3 utilisateurs, il me renvoie les DN, de là je me connecte en faisant un foreach, non plus sur chaque (10, 20, 30...) domaine pour faire la recherche mais directement sur les (2 ou 3) DN pour faire la modif sur chaque user (changer son mot de passe, le désactiver, etc...)

 

edit : ton code marche  [:btbw03:1] .... merciiiii :jap: !!!

 

le truc rigolo : si je lui demande de m'afficher $adspath, il m'envoie une erreur :heink:
et je crois qu'en fait, ce site aussi je l'ai déjà visité. mais je crois qu'en regardant pas à pas comment il faisait, je m'étais arrété à l'erreur sur $ADsPath
si je continue en lui disant de créer un directorysearcher avec cette variable comme searchroot, ça marche. dafuq.

 


edit 2 : bon, plus qu'à modifier tous mes scripts [:prozac]


Message édité par misato le 14-03-2014 à 13:03:37

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
n°2222321
bath66
@#!
Posté le 14-03-2014 à 13:23:05  profilanswer
 

Il te retourne quoi comme erreur ?
Moi quand je cherche à l'afficher ca mouline, je CTRL+C avant dans le doute où il m'afficherai toute la foret. :D  
Peut-etre que ce type d'objet ne peut pas etre affiché tout simplement...


---------------
La violence est le dernier refuge de l'incompétence (Isaac ASIMOV, Fondation).
mood
Publicité
Posté le 14-03-2014 à 13:23:05  profilanswer
 

n°2222331
misato
Clavicula Nox
Posté le 14-03-2014 à 15:37:44  profilanswer
 

texto, voilà l'erreur que j'ai :

Code :
  1. format-default : The following exception occurred while retrieving members: "Unknown error (0x8000500c)"
  2.     + CategoryInfo          : NotSpecified: (:) [format-default], ExtendedTypeSystemException
  3.     + FullyQualifiedErrorId : CatchFromBaseGetMembers,Microsoft.PowerShell.Commands.FormatDefaultCommand
 

qui semblerait vaguement vouloir dire que le format n'est pas le bon (erreur qu'on peut avoir en faisant une requete LDAP sur un serveur openldap non configuré pour windows :gratgrat: )

 

l'option "pas affichable directement" me tente bien ... mais ne me satisfait pas intellectuellement parlant :o²²²²


Message édité par misato le 14-03-2014 à 15:59:43

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
n°2222351
nebulios
Posté le 14-03-2014 à 17:52:41  profilanswer
 

Pour avoir le module AD sur ton poste, il suffit d'installer le RSAT, pas de besoin de te connecter au DC (je suppose que tu as au moins un DC 2008 R2).
 
Sinon, tu peux faire de l'implicit remoting :
 
- New-PsSession sur le DC
- Import-Module AD*
-Import-PsSession
 
et là tout est accessible depuis ton poste, même si tu as zéro module installé.

n°2222387
misato
Clavicula Nox
Posté le 14-03-2014 à 23:19:53  profilanswer
 

ça serait une autre idée.

 

comme j'ai déjà des scripts qui sont en prod pour d'autres personnes (et donc d'autres postes que le mien sur lesquels je vais pas m'amuser à installer chaque fois le module powershell), je pense que cette solution aurait été préférable, mais là j'ai résolu mon souci sans le module AD :)

 

mais merci ;)


Message édité par misato le 14-03-2014 à 23:20:16

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [powershell] recherche global catalog [résolu]

 

Sujets relatifs
faire son propre moteur de recherche/indexeurFonction recherche [html,...et?]
Bookmarklet - supprimer résultats recherche boncoinRecherche de CMS flexible
Recherche tutoriel pour Flash Cs5.5 + Xml (read and write)[Topic] Recherche des nombres de Mersenne premiers
[POWERSHELL] pbl pour lister sous arborescence[RESOLU][PowerShell] Pb Impor-csv et recuperation en variable
bouton de recherche vb6 
Plus de sujets relatifs à : [powershell] recherche global catalog [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR