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-ID: 302480

Url: https://administrator.de/forum/powershell-globale-ad-abfrage-302480.html

Ausgedruckt am: 22.12.2024 um 10:12 Uhr

colinardo
colinardo 21.04.2016 aktualisiert um 16:09:15 Uhr
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
skahle85
skahle85 21.04.2016 um 16:15:47 Uhr
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...???
colinardo
colinardo 21.04.2016 aktualisiert um 16:49:14 Uhr
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.
skahle85
skahle85 21.04.2016 um 16:21:51 Uhr
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.
colinardo
colinardo 21.04.2016 um 16:24:07 Uhr
Goto Top
Ich schnippsel da mal später was zusammen sofern ich noch Zeit finde.
skahle85
skahle85 21.04.2016 um 16:25:13 Uhr
Goto Top
Klingt gut. Falls ich bis dahin noch was finde geb ich Bescheid.

Danke dir Uwe
colinardo
Lösung colinardo 21.04.2016 aktualisiert um 17:18:41 Uhr
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
skahle85
skahle85 21.04.2016 um 17:14:22 Uhr
Goto Top
Macht/Sucht was ich brauche. Vielen Dank Uwe!
colinardo
colinardo 21.04.2016 aktualisiert um 17:18:08 Uhr
Goto Top
Schön zu hören face-smile

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