Powershell UserGruppe auslesen und anderen User entsprechend eintragen.

Blue_Moon

Lt. Junior Grade
Dabei seit
Mai 2004
Beiträge
494
Hallo zusammen,
ich suche gerade einen Weg um über die Powershell die Gruppen eines Users auszulesen und zu filtern.
Ich möchte von UserA die Gruppen auslesen, die mit "xyz" beginnt.
UserB soll anschließend in genau diese Gruppe eingetragen werden.

Die Aufnahme in die Gruppe bekomm ich per:
Add-ADGroupMember -Identity "xyz" -Members UserB
hin.

Mir fehlt aber noch die Suche nach dem Gruppenname von UserA.
Geht das überhaupt in einem einzigen Befehl?

Schon mal vorab vielen Dank für eure Hilfe!

Gruß
matthias
 

d2boxSteve

Captain
Dabei seit
Apr. 2010
Beiträge
3.282
Das geht mit "duch die Gegend pipen ...".

Du kannst mit Get-ADUser UserA meine ich die Gruppenliste ausgeben lassen, die mit | in einen -match jagen und dann | Add-ADGroupMember -Members UserB
Dabei bekommt er die Gruppe/n ja aus den Befehlen davor.

Die genaue Syntax müsste ich jetzt auch googeln.
Ergänzung ()

So, mal eben getestet, so könnte es aussehen:

Code:
PS C:\Windows\system32> Get-ADPrincipalGroupMembership steve | where-object {$_.name -Match "esx"}


distinguishedName : CN=ntfl_esxi_admins,OU=groups,OU=nTfL,DC=ntfl,DC=local
GroupCategory     : Security
GroupScope        : Global
name              : ntfl_esxi_admins
objectClass       : group
objectGUID        : d3ec445b-eb5b-4c00-bc2a-c3f6eed3e08e
SamAccountName    : ntfl_esxi_admins
SID               : S-1-5-21-1376769971-1587928978-4264197944-1150



PS C:\Windows\system32>
Du müsstest anstelle von "steve" UserA nehmen und beim Match halt deinen Suchbegriff.
Danach eben: | Add-ADGroupMember -Members UserB
 
Zuletzt bearbeitet:

Expyronec

Newbie
Dabei seit
Jan. 2012
Beiträge
2
Code:
$groups = Get-ADUser $user -Properties MemberOf | Select -ExpandProperty memberof | ?{$_.startsWith("xyz")}
... so aus dem Kopf - daher nicht 100% sicher ;)
 

d2boxSteve

Captain
Dabei seit
Apr. 2010
Beiträge
3.282
Also anstelle von:
{$_.name -Match "xyz"}
kann man besser das nehmen:
{$_name.StartsWith("xyz")}

Denn bei "match" kann xyz irgendwo im Namen vorkommen.
 

Blue_Moon

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Mai 2004
Beiträge
494
Super, vielen Dank für die Hilfe! Funktioniert einwandfrei!
Kann man anstatt dem .name.StartsWith auch alle Gruppen einer bestimmten OU selektieren?
 
Zuletzt bearbeitet:

d2boxSteve

Captain
Dabei seit
Apr. 2010
Beiträge
3.282
Wenn du dir mein Beispiel ansiehst, das ".name" ist einfach nur der Bezeichner für den Gruppennamen und ".StartsWith("...")" ist bei jedem String anwendbar.
Wenn das im Ergebnis deiner Suche auch vorkommt, dann ja.
Du müsstest halt nur googlen, wie man die Gruppen einer OU ausliest.
Ergänzung ()

PS: probiers mal damit: Get-ADGroupMember -filter * -SearchBase "ou=Ou you want to search,dc=you domain,dc=com"
 
Zuletzt bearbeitet:

Blue_Moon

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Mai 2004
Beiträge
494
Und wieder ein Stück weiter...
Habs jetzt allerdings etwas anders gelöst bekommen und auch noch Invoke-Command gefunden, damit ich den Befehl nicht auf den Server ausführen muss.
Klappt auch!

Invoke-Command -Computername SERVER {Get-ADPrincipalGroupMembership UserA | where-object {$_ -like ("*GRUPPEN*")} | Add-ADGroupMember -Members UserB}


Jetzt wäre es perfekt, wenn ich das ganze noch aus einer DOS-Box starten könnte und nicht die Powershell öffnen müsste.
Dann könnte ich das ganze aus einem Oracle-Forms-Programm ausführen lassen.
 

d2boxSteve

Captain
Dabei seit
Apr. 2010
Beiträge
3.282
Schreib einfach:
powershell.exe -command Invoke-Command -Computername SERVER {Get-ADPrincipalGroupMembership UserA | where-object {$_ -like ("*GRUPPEN*")} | Add-ADGroupMember -Members UserB}

Das geht in der DOS-Box. Du solltest nur aufpassen, welche Execution-Policy verwendet wird, evtl. gleich das mit angeben:
powershell.exe -ExecutionPolicy Bypass -command Invoke-Command -Computername SERVER {Get-ADPrincipalGroupMembership UserA | where-object {$_ -like ("*GRUPPEN*")} | Add-ADGroupMember -Members UserB}
Ergänzung ()

Außerdem ... wenn du das ausführst wird der invoke (= Benutzerwechsel) mit deiner Kennung gemacht. Wenn das eine Software macht musst du beachten daß die evtl. mit einer anderen Benutzerkennung läuft ...
 
Zuletzt bearbeitet:

Blue_Moon

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Mai 2004
Beiträge
494
Komm leider jetzt erst wieder zum weitertesten.
Wenn ich den Befehl eingebe, kommt folgende Fehlermeldung:
Der Befehl "where-object" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
 

Micha45

Commander
Dabei seit
Mai 2009
Beiträge
2.263
Versuche es mal nur mit "Where".
Hier solltest du dich auch mal informieren, was da alles dranhängt.
Man kann z.B. nicht alles in der Pipline verwenden. Kann sein, dass deshalb die Fehlermeldung kommt.
 

Blue_Moon

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Mai 2004
Beiträge
494
Der Befehl an sich funktioniert, in der Powershell.
Ich muss diesen aber über eine DOS-Box ausführen....

Invoke-Command -Computername SERVER {Get-ADPrincipalGroupMembership UserA | where-object {$_ -like ("GRUPPEN")} | Add-ADGroupMember -Members UserB}


Ich bräuchte dann auch noch einen Befehl um bei einem User alle Gruppen zu entfernen.
Invoke-Command -Computername SERVER {Get-ADPrincipalGroupMembership -Identity UserA | % {Remove-ADPrincipalGroupMembership -Identity UserA-MemberOf $_ -Confirm:$False}}

klappt zwar...aber auch nur aus der Powershell direkt.
 
Zuletzt bearbeitet:
Top