mguenth83
Goto Top

Powershell Filtern

Hi,
ist vielleicht ne blöde Frage aber wie kann ich nach einem Property Filtern?

Ziel des Skriptes ist es alle User aus dem AD aufzulisten die nicht in der Gruppe Passwort sind.

Get-ADUser -Filter { Name -Like "*" } -SearchBase "OU=Benutzer,DC=CONTOSO,DC=DE" -Properties *  

Das Script zeigt mir jetzt schon mal alle User mit den Properties an...jetzt will ich im Endeffekt die User rausfiltern sind nicht in der Gruppe Passwort sind. Diese User sollen das aufgelistet werden.

Gruß
Matthias

Content-ID: 215456

Url: https://administrator.de/forum/powershell-filtern-215456.html

Ausgedruckt am: 21.12.2024 um 06:12 Uhr

CooC
CooC 28.08.2013 aktualisiert um 13:24:34 Uhr
Goto Top
Hallo Matthias,

<dein_kommando> | where {$_ -match "<dein_muster>"}

dürfte das sein was du suchst!
106543
106543 28.08.2013 um 13:32:18 Uhr
Goto Top
<dein_kommando> | where {$_ -match "<dein_muster>"}
eher
<dein_kommando> | where {$_ -NOmatch "<dein_muster>"}  
mguenth83
mguenth83 28.08.2013 um 13:42:53 Uhr
Goto Top
Habe es jetzt ergänzt aber leider bekomme ich keine Ausgabe
Get-ADUser -Filter { Name -Like "*" } -SearchBase "OU=Benutzer,DC=CONTOSO,DC=DE" -Properties * | where {$_ -match "PASSWORT"}  


Vielleicht liegt es daran das der Inhalt in Klammern steht und er es deswegen nicht findet ?

MemberOf                           : {CN=PASSWORT,OU=Gruppen,DC=CONSOTO,DC=de,}
colinardo
colinardo 28.08.2013 aktualisiert um 15:56:11 Uhr
Goto Top
Hallo Matthias,
das kannst du zuverlässiger so machen:
#hole alle Benutzer im AD
$allUsers = Get-AdUser -Filter *

#hole nur die Benutzer in der Gruppe "Passwort" inklusive User in Untergruppen 
$groupPassUsers = Get-AdGroupMember -Identity "Passwort" -recursive  

#Vergleiche beide Objekte miteinander und ziehe die Nutzer in der Gruppe "Passwort" davon ab 
$diffUsers = Compare-Object -ReferenceObject $allUsers -DifferenceObject $groupPassUsers
$diffUsers
Es zeigt dir alle Nutzer die nicht in der Gruppe Passwort sind.

Grüße Uwe
filippg
filippg 28.08.2013 aktualisiert um 16:02:18 Uhr
Goto Top
Hallo,

"where {$_ -match "PASSWORT"}" kann nicht so richtig funktionieren, weil du nicht angibst, welches Property gematcht werden soll.
Ich würde einen Test mit " | where {$_.memberOf -notlike "*CN=PASSWORT,OU=Gruppen*"} " empfehlen (ich bilde mir auch ein, dass -notlike/-like schneller als -nomatch/match sein, weil letztere auch RegEx parsen).

Gruß

Filipp

Edit: alle hier gezeigten Ansätze haben natürlich den Nachteil, dass sie erst alle Nutzer laden, und dann die unerwünschten mit "where" aussortieren. Hübscher wäre es, gleich nur die richtigen zu bekommen. Mit dem "-Filter"-Attribut kann man nicht immer alles filtern, was man will, wie es sich bei Get-ADUser verhält weiß ich nicht. Aber mindestens mit dem -LDAPFilter-Attribut kann man die Auswahl von vorneherein auf die gewünschten Nutzer einschränken. Websuche nach "get-aduser filter group" hilft dir bestimmt weiter.

Edit 2:
$diffUsers = Compare-Object -ReferenceObject $allUsers -DifferenceObject $groupPassUsers
Ich kann das gerade (mangels Server) nicht testen - funktioniert das? Ich dachte, Get-AdUser liefert einen User, während Get-AdGroupMember einen anderen Datentyp liefert (GroupMember können ja auch Gruppen und im Zweilfesfall sogar Kontakte sein), und die Datentypen lassen sich nicht vergleichen (wenn man wiederum nur den DN selektiert, müsste es gehen)
mguenth83
mguenth83 30.08.2013 um 10:07:55 Uhr
Goto Top
Hi,
bin endlich wieder mal am PC und wollt Euch rückmeldung geben. Danke an colinardo das Script hat soweit funktioniert. Habe ein paar Kontrollen ausgeführt und es scheint alles richtig zu sein. Filppg deine Variante habe ich noch nicht ausprobiert aber werde ich auf jedenfall am Wochenende in einer ruhen Minute mal angehen und gebe das Rückmeldung

Danke nochmal an alle die mir bei den ersten Schritten in Sachen Powershell geholfen haben.

Gruß
Matze