Question Lister les shares d'un domaine
- Chiqo
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 15
- Remerciements reçus 0
je suis confronté à un problème, et ce malgré mes nombreuses recherches sur le net, et après lecture de plusieurs livres sur Powershell dont celui que l'on peut voir sur le coté
Mon problème est le suivant : j'ai besoin de lister tous les fichiers accessibles au sein d'un (plusieurs) domaine(s) Active Directory pour un user.
En gros le but serait de lister (et au passage de récupérer les droits) de tous les fichiers de tous les serveurs que je peux voir dans \"My network place\".
Je me dit que si je le vois via une IG windows, je dois pouvoir récupérer ça par powershell. D'autant que depuis une station linux et un simple client fusesmb, je peux mounter en local ces fichiers.
Un [code:1]Get-WmiObject -class Win32_Share[/code:1] n'est pas l'idéal, étant donnée que WMI n'est pas configuré sur les serveurs pour un accès remote (plus de 200 serveurs + une liste d'une 30aine de workstations).
Si quelqu'un a une idée, je suis preneur et l'en remercie d'avance !
Chiqo, le boulet qui réussi à s'inscrire finalement
Connexion ou Créer un compte pour participer à la conversation.
- Chiqo
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 15
- Remerciements reçus 0
Ce que je souhaite faire n'est pas claire ou alors Powershell ne le permet pas ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6300
- Remerciements reçus 68
Chiqo écrit:
Belle requête !Mon problème est le suivant : j'ai besoin de lister tous les fichiers accessibles au sein d'un (plusieurs) domaine(s) Active Directory pour un user.
Chiqo écrit:
un critére de plus(et au passage de récupérer les droits)
Quelques recherche sur MSDN, je débutes avec clsid car le Shell est basé sur des interfaces COM :
My Network Places clsid -> IPersistFolder -> IShellFolder ->
Méthode IShellFolder::EnumObjects -> via ITEMIDLIST -> Introduction to the Shell Namespace
Et dans la dernière on voit un graphique référençant ton dossier que tu souhaites interroger, ça me semble une bonne piste.
Y a plus qu'à creuser les API, surtout que la méthode EnumObjects semble fournir les infos recherchées...
Cela fait un peu étalage, mais c'est pour te signaler que ce n'est pas parce que l'on VOIT les choses que l'on peut facilement les faire.
Chiqo écrit:
L'énoncé est claire comme de l'eau de roche, ça réalisation va te demander un certains temps.Ce que je souhaite faire n'est pas claire
Chiqo écrit:
Il n'est pas prévu pour ce type de manipulations, déjà avec des langages évolués ce type de développement est loin d'être une sinécure.ou alors Powershell ne le permet pas ?
Un des intérêts de PS est que les développeurs, systèmes ou pas, mettent à disposition des IT des outils facilitant l'administration.
Pour cette tâche personne n'a encore mis d'outil à ta dispo pour réaliser ce que tu souhaites.
Mais je reconnais que c'est un besoin comme un autre, ne connaissant pas AD, il se peut que tu puisses y trouver une solution, puisqu'il est un des fournisseur de cet affichage.
De plus ce que tu vois dans cette fenêtre est dynamique et elle permet une naviguation si je ne me trompes.
En théorie on peut donc imaginer un provider PS sur ce folder virtuel, une belle demande à formuler auprès de Microsoft
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Chiqo
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 15
- Remerciements reçus 0
je te remercie pour ton aide.
J'ai poursuivi les recherches avec tes pistes, mais je suis de nouveau bloqué, mais au niveau scripting désormais,j'ai failli créer un topic dans le forum débutant mais je préfère poster à la suite
J'en profite pour expliquer ce que je compte tester, dès fois que ça intéresse d'autres personnes.
Alors voilà, l'idée pour faire ce que je veux est d'utiliser les \"junction point\". Connaissant le CLSID de \"My Network Place\" (208D2C60-3AEA-1069-A2D7-08002B30309D ; trouvé sur MSDN), j'ai voulu utiliser la méthode [IFileSystemBindData2]::GetJunctionCLSID qui retourne
pclsid
[out] When this method returns successfully, receives a pointer to the CLSID of the object that implements IShellFolder for the current item, if the item is a junction point.
Cela semble donc convenir.
Mais le problème de débutant auquel je suis confronté est...comment accéder à cette méthode ? Elle ne semble pas être fournit par le framework .NET donc je suis un peu perdu
J'ai effectué quelques tests
[code:1]$test=New-Object -comObject IFileSystemBindData2[/code:1]
Dont des inutiles
[code:1]$test=[IFileSystemBindData2]::GetJunctionCLSID(\"208D2C60-3AEA-1069-A2D7-08002B30309D\"[/code:1]
Et encore d'autres que je n'afficherais pas pour garder un peu de crédibilité
Mais quelque chose à du m'échapper...
Je recherche donc quelqu'un pour m'éclairer sur cette partie
Merci d'avance.
Edit : après rélexion, instancier une interface me semble pas être une solution, je me trompe ? <br><br>Message édité par: Chiqo, à: 21/09/09 10:25
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6300
- Remerciements reçus 68
Chiqo écrit:
Oui c'est préférable.mais je préfère poster à la suite
Chiqo écrit:
A coeur vaillant rien d'impossible.j'ai voulu utiliser la méthode [IFileSystemBindData2]::GetJunctionCLSID
Chiqo écrit:
Normal c'est une API Win32, plus précisément une interface COM.Elle ne semble pas être fournit par le framework .NET donc je suis un peu perdu
[code:1]$test=New-Object -comObject IFileSystemBindData2[/code:1]
Chiqo écrit:
Oui tu as raison.Edit : après rélexion, instancier une interface me semble pas être une solution, je me trompe ?
Ici tu utilises une interface, c'est +- un contrat qu'un objet remplit.
Une interface est une abstraction, tu dois adresser un objet qui l'implémente.
Chiqo écrit:
Et encore d'autres que je n'afficherais pas pour garder un peu de crédibilité
Chiqo écrit:
Déjà PowerShell ne sait pas créer un objet COM à partir d'un CLSID (classe id), il faut passer par la classe Activator .Mais quelque chose à du m'échapper
La doc de l'interface utilisée dans l'exemple, je pense que c'est celle-ci, si je regarde l'exemple et la signature de la méthode j'ai comme l'impression qu'il manque qq chose...
Ensuite tu récupères un pointeur en sortie uniquement, [ref] en PS. De plus tu dois gérer les erreurs renvoyées par cette méthode (HResult).
Tout en sachant que PS v1 gére trés mal la notion d'interface, celle du C#, bien qu'ici on soit plutot sous COM.
A tester.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Chiqo
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 15
- Remerciements reçus 0
Laurent Dardenne écrit:
A tester
Disons que j'ai deux possibilités :
Je précise que ce script va être scheduler, et que par conséquent, les credentials utilisés doivent être ceux d'un user sans droits particulier (facile sinon avec les credentials admins )
Le but de ce script est de mettre sous contrôle tous les shares du réseau, pour des raisons de sécurité.
Durant mon stage je m'étais cassé les dents sur la deuxième solution (parc de 200 serveurs en production sous windows 2003 + les stations utilisateurs sous XP) et j'avais abandonné cette idée (je voulais passer par WMI pour du monitoring).
Laurent Dardenne écrit:
Déjà PowerShell ne sait pas créer un objet COM à partir d'un CLSID (classe id), il faut passer par la classe Activator.
Pourrais-tu me donner un exemple pour mon cas si ce n'est pas abuser de te demander ça ; mes essais sont sans succès... Sans doute parce que je ne sais pas précisément comment charger l'assembly (mauvais namespace ?)
[code:1][Activator]::CreateInstance([IFileSystemBindData2]::GetJunctionCLSID(\"208D2C60-3AEA-1069-A2D7-08002B30309D\"«»))[/code:1]
Laurent Dardenne écrit:
Ensuite tu récupères un pointeur en sortie uniquement, [ref] en PS.
La gestion des pointeurs est compliqué sous powershell ? Peut-on récupérer l'objet qui est sous le pointeur (mon fameux IShellFolder !)
Voilà, désolé de te demander autaut, mais je ne sais plus trop comment faire :/
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- Lister les shares d'un domaine