Powershell - Globale AD Abfrage
Hallo Gemeinde,
ich Suche da etwas ganz bestimmtes im AD und habe dazu folgendes gefunden:
Der Suchstring ist definitiv als proxyaddress bei einem user hinterlegt und trotzdem findert er ihn nicht...
Vielleicht eine Idee jemand?
Danke
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
Please also mark the comments that contributed to the solution of the article
Content-ID: 302480
Url: https://administrator.de/contentid/302480
Printed on: December 5, 2024 at 22:12 o'clock
9 Comments
Latest comment
Hallo @skahle85 .
Die Eigenschaft Properties ist eine Hashtable und per Default nicht itterierbar, diese musst du deswegen anders ansprechen.
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
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}}
Grüße Uwe
?? 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.
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 ...
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
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
Grüße Uwe
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
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
Grüße Uwe