[PowerShell] Aide syntaxe PS et affichage de résultats byte/texte

Aide syntaxe PS et affichage de résultats byte/texte [PowerShell] - Shell/Batch - Programmation

Marsh Posté le 22-07-2024 à 17:13:32    

Salut,

 

Je tente un script PS pour sortir les utilisateurs (uid) membre d'un certain groupe (ou) d'un ldap dans lequel je peux taper de manière anonyme depuis une machine qui n'est pas dans l'AD
En shell sous linux, ça me prend une ligne avec ldapsearch et je dois dire que j'ai de la peine à comprendre la procédure avec PS.

 

Voilà mon code fonctionnel

 
Code :
  1. [System.Reflection.Assembly]::Load("System.DirectoryServices.Protocols, version=4.0.0.0, culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" ) | Out-Null
  2. [System.Reflection.Assembly]::Load("System.Net, version=4.0.0.0, culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" ) | Out-Null
  3. $myserver=New-Object System.DirectoryServices.Protocols.LdapDirectoryIdentifier("ldap.cogip.com:636" )
  4. $connection = New-Object System.DirectoryServices.Protocols.LdapConnection($myserver)
  5. $connection.SessionOptions.SecureSocketLayer = $true;
  6. $connection.SessionOptions.ProtocolVersion = 3
  7. $connection.AuthType = [System.DirectoryServices.Protocols.AuthType]::Anonymous
  8. $connection.Bind()
  9. $request = new-object System.DirectoryServices.Protocols.SearchRequest
  10. $request.DistinguishedName = "ou=pif, ou=paf"
  11. $request.Filter = "(&(ObjectClass=posixAccount)(ou=mongroupe))"
  12. $request.Attributes.Add("uid" ) | Out-Null
  13. $mydata = $connection.SendRequest($request);
  14. foreach ($myuserinfo in $mydata.Entries.Attributes) {
  15.     $username = [string]$myuserinfo["uid"][0] -replace '@.+$',''
  16.     $username
  17. }
  18. $connection.Dispose()
 

J'ai passé une demi journée pour réussir à faire fonctionner ce truc, j'ai tenté d'autre méthodes avec un objet  System.DirectoryServices.DirectorySearcher mais impossible d'en sortir quoi que ce soit.

 

Les questions qui se posent sont les suivantes:

 

Pour les lignes de chargement de modules/libraries

Code :
  1. [System.Reflection.Assembly]::Load("System.DirectoryServices.Protocols, version=4.0.0.0, culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" ) | Out-Null
  2. [System.Reflection.Assembly]::Load("System.Net, version=4.0.0.0, culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" ) | Out-Null


Que signifie cette syntaxe de [....]::Load... ?
Y a t'il un équivalent avec qqch du genre

Code :
  1. $mylib = new-object System.Reflection.Assembly.Load("System.Net" )...


Ou ça n'a aucun lien ?

 

Avant d'utiliser Assembly.load, j'utilisais Assembly.LoadWithPartialName mais MS nous dit que c'est obsolète et qu'il faut utiliser Asembly.Load, sans aucune autre info. Par bol j'ai trouvé un gus qui explique le chargement de la librairie en allant fouiller dans les dossier windows pour trouver les versions des lib mais y a t'il une doc qui explique ça quelque part ? Parce qu'à part être devin, j'ai des doutes que les gens comprennent ça du premier coup.

 

Une fois ma requête lancée, je récupère mon objet "SearchRequest" mais quand j'essaie d'afficher le contenu, c'est relativement incompréhensible.

 
Code :
  1. $mydata.Entries| Format-list


Me sort un bloc d'info en une ligne donc pas vraiment lisible

 

J'ai tenté ensuite

Code :
  1. $mydata.Entries.Attributes | Format-list
 

Mais ça me crache du byte code [:gnub] qqn peut m'expliquer pourquoi ? Ok, certaines personnes ont plusieurs UID (username, username@group2, username@group3) mais c'est quoi l'idée avec cette conversion ?

 

Et pourquoi le simple fait de forcer le premier élément de l'UID avec $myuserinfo["uid"][0] suffit à afficher ça en "clair" ? Y a t'il une autre méthode ? Je suis tombé sur un bout de code mais le type crée une fonction et son code fait limite 2 pages pour afficher une simple donnée LDAP [:gnub], ça me parait un peu violent quand même.

 

Je suis clairement un noob en PS vu que je fais que du shell unix mais je dois dire que la syntaxe de ce langage est n'est vraiment clair et quand on veut faire des trucs un peu particulier du genre taper dans un LDAP depuis une machine non-AD, c'est la foire complète pour trouver du code qui fonctionne.

 

Merci d'avance pour vos explications :jap:


Message édité par darxmurf le 22-07-2024 à 17:27:33

---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 22-07-2024 à 17:13:32   

Reply

Marsh Posté le 23-07-2024 à 08:27:04    

okay, en fouillant un peu, on trouve une autre solution moins lourde
 

Code :
  1. $domain = "LDAP://ldap.cogip.com:636/c=ch"
  2. $root = New-Object -TypeName System.DirectoryServices.DirectoryEntry($domain,$null,$null,"anonymous" )
  3. $query = New-Object System.DirectoryServices.DirectorySearcher($root,"(&(ObjectClass=posixaccount)(ou=mongroupe))","uid" )
  4. $result = $query.FindAll()
  5. $result.Properties.uid


 
 
La clareté de ce language est fantastique [:tinostar]


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 23-07-2024 à 21:17:05    

darxmurf a écrit :

La clareté de ce language est fantastique [:tinostar]

C'est ce que je me dis à chaque fois quand je vois du PS. :o Bien content de ne pas devoir toucher à ça... :whistle:

Reply

Marsh Posté le 23-07-2024 à 23:53:56    

rat de combat a écrit :

C'est ce que je me dis à chaque fois quand je vois du PS. :o Bien content de ne pas devoir toucher à ça... :whistle:

 

Nan mais apparemment tu peux utiliser des abréviations pour aider... Ou pas [:tinostar]


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 30-07-2024 à 13:55:11    

rat de combat a écrit :

C'est ce que je me dis à chaque fois quand je vois du PS. :o Bien content de ne pas devoir toucher à ça... :whistle:

Pareil.
Même Perl est plus lisible  [:virginie]  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-07-2024 à 15:50:31    

gilou a écrit :

Pareil.
Même Perl est plus lisible  [:virginie]  
A+,


 
Merci de me rassurer les gars [:tinostar].
Bon au final je n'ai pas eu besoin de ce foutu script \o/


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 30-07-2024 à 19:07:24    

gilou a écrit :

Même Perl est plus lisible  [:virginie]

Sauf si on parle https://en.wikipedia.org/wiki/Obfuscated_Perl_Contest  :whistle:  
 
Sérieusement, je suis toujours vexé que ce soit Python qui a emporté la course très visiblement. Je n'arrive pas à me faire à ce language, les vrais barbus font du Perl! :o

Reply

Marsh Posté le 30-07-2024 à 21:23:46    

rat de combat a écrit :

Sauf si on parle https://en.wikipedia.org/wiki/Obfuscated_Perl_Contest :whistle:

 

Sérieusement, je suis toujours vexé que ce soit Python qui a emporté la course très visiblement. Je n'arrive pas à me faire à ce language, les vrais barbus font du Perl! :o

 

Pff j'ai commencé un peu le python parce que c'est tendance mais je peux tellement tout faire en shell que je n'avance pas [:tinostar]


---------------
Des trucs - flickr - Instagram
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed