skahle85
Goto Top

Powershell - Globale AD Abfrage

Hallo Gemeinde,

ich Suche da etwas ganz bestimmtes im AD und habe dazu folgendes gefunden:

$string='was ich suche hier'  
([adsisearcher]'cn=*').FindAll()|  
      ForEach-Object{
           if($_.Properties.Values|?{$_ -match $string}){$_}
       }

Der Suchstring ist definitiv als proxyaddress bei einem user hinterlegt und trotzdem findert er ihn nicht...

Vielleicht eine Idee jemand?

Danke

Content-Key: 302480

Url: https://administrator.de/contentid/302480

Printed on: April 27, 2024 at 01:04 o'clock

Member: colinardo
colinardo Apr 21, 2016 updated at 14:09:15 (UTC)
Goto Top
Hallo @skahle85 .
Die Eigenschaft Properties ist eine Hashtable und per Default nicht itterierbar, diese musst du deswegen anders ansprechen.
$regexstring = 'bla bla bla'  
([adsisearcher]'cn=*').FindAll() | ?{$_.Properties.GetEnumerator() | ?{$_.Value -match $regexstring}}  
Achtung -match prüft den String in der Regex-Syntax !! Willst du stattdessen mit simplen Wildcards abeiten kommt stattdessen -like zum Einsatz.

Grüße Uwe
Member: skahle85
skahle85 Apr 21, 2016 at 14:15:47 (UTC)
Goto Top
Hey Uwe,

ja und JA Aber... Wenn ich das Ausführe (Ergebnis ist btw das Gleiche wie mit der Abfrage die ich gepostet habe) bekomme ich lediglich Gruppenmitgliedschaften. Möglicherweise ist auch der Ganze Ansatz voll Gurke den ich habe und die Abfrage müsste komplett anders aussehen...???
Member: colinardo
colinardo Apr 21, 2016 updated at 14:49:14 (UTC)
Goto Top
Zitat von @skahle85:
bekomme ich lediglich Gruppenmitgliedschaften
?? Die Frage ist doch was du durchsuchen und als Ergebnis haben willst ...
Möglicherweise ist auch der Ganze Ansatz voll Gurke den ich habe und die Abfrage müsste komplett anders aussehen...???
Ja das ist er ... auch weil ohne Angabe welche Properties man abrufen möchte nur gecachte Einträge und nicht alle Properties gelistet werden, denn Eigenschaften sind teilweise Objekte die man expandieren und in Strings umwandeln muss, etwas konkreter solltest du es schon definieren..., habe aber gerade etwas zu wenig Zeit.
Member: skahle85
skahle85 Apr 21, 2016 at 14:21:51 (UTC)
Goto Top
Die Frage ist doch was du durchsuchen und als Ergebnis haben willst ...
Das GESAMMTE AD ohne Ausnahmen und das einzige was ich habe nach dem ich Suchen kann ist dieser besagte eine String.
Member: colinardo
colinardo Apr 21, 2016 at 14:24:07 (UTC)
Goto Top
Ich schnippsel da mal später was zusammen sofern ich noch Zeit finde.
Member: skahle85
skahle85 Apr 21, 2016 at 14:25:13 (UTC)
Goto Top
Klingt gut. Falls ich bis dahin noch was finde geb ich Bescheid.

Danke dir Uwe
Member: colinardo
Solution colinardo Apr 21, 2016 updated at 15:18:41 (UTC)
Goto Top
Gerade mal schnell angetestet, funktioniert hier mit einem String den ich in unterschiedlichste Attribute rein geschrieben habe. Gibt per Default nur den DN des Objekts an in welchen der String gefunden wurde. Das lässt sich aber nach Wunsch ändern je nachdem was man eben haben möchte ...
Import-Module ActiveDirectory
$string = 'Dein String'  
Get-ADObject -Filter * -Properties * -ResultSetSize $null | ?{$obj = $_;($_ | gm -MemberType Property) | ?{[string]$obj.($_.Name) -match [regex]::Escape($string)}} | select DistinguishedName
Möchte man auch gelöschte Objekte durchsuchen, kann man das auch wenn man den entsprechenden Parameter bei Get-ADObject mitgibt.

Brauchst du zusätzlich den Namen des LDAP-Feldes(er) in dem der String gefunden wurde erreichst du das stattdessen hiermit
$string = 'Das such ich'  
Get-ADObject -Filter * -Properties * -ResultSetSize $null | %{
    $obj = $_
    $found = ($_ | gm -MemberType Property) | ?{[string]$obj.($_.Name) -match [regex]::Escape($string)} | select -Expand Name
    if ($found){[pscustomobject]@{Object=$obj.DistinguishedName;"StringFoundInProperties"=$found}}  
}

Je nachdem wie eure Forest-Struktur aussieht musst du eventuell stattdessen einen Global-Catalog-Server abfragen wenn euer Forest mehrere Domains hat und bei Get-ADObject mit -SearchBase den Start-DN des Forests statt der lokalen Domain angeben.

p.s. sorry für die vielen Skript-Oneliner, aber das ist eine Krankheit der Powersheller die Zeilenumbrüche hassen face-wink

Grüße Uwe
Member: skahle85
skahle85 Apr 21, 2016 at 15:14:22 (UTC)
Goto Top
Macht/Sucht was ich brauche. Vielen Dank Uwe!
Member: colinardo
colinardo Apr 21, 2016 updated at 15:18:08 (UTC)
Goto Top
Schön zu hören face-smile

Schönen Feierabend wenn es dann so weit ist.
Uwe