fullmetal
Goto Top

AD-Computer Gruppen zu anderen Computer kopieren

Hallo zusammen,

ich habe mir vor ein paar Tagen ein Skript kopiert womit ich die Gruppen, also "Mitglied von", eines AD-Benutzers auf einen anderen kopieren kann:

$UserSource = 'user1'  
$UserTarget = 'user2'  

$UserSourceObject = (Get-ADUser $UserSource -Properties memberOf)

foreach ($Group in $UserSourceObject.MemberOf) {
    Add-ADGroupMember -Identity $Group -Members $UserTarget
}

Funktioniert bisher wunderbar.

Jetzt habe ich versucht das für Computer-Konten umzuschreiben:

$ComputerSource = 'computer1'  
$ComputerTarget = 'computer2'  

$ComputerSourceObject = (Get-ADComputer $ComputerSource -Properties memberOf)
foreach ($Group in $ComputerSourceObject.MemberOf) {
    Add-ADGroupMember -Identity $Group -Members $ComputerTarget -Verbose -WhatIf
}

Das Skript wird ohne Fehlermeldungen ausgeführt, aber es passiert nichts. Die Gruppen werden nicht kopiert.
Ich hab natürlich schon gegoogelt, daher kommen die beiden Optionen "-Verbose" & "-WhatIf". Statt "Add-ADGroupMember" habe ich auch schon "Add-ADPrincipalGroupMembership" probiert - ebenfalls ohne Erfolg und Fehlermeldung.


Edit: 'computer2' ist ein neues Objekt und ist nur Mitglied von "Domain Computers". Und ich führe das Skript auf einem DC aus.


Hat jemand eine Idee?


Danke und viele Grüße
FullMetal

Content-Key: 660625

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

Printed on: April 23, 2024 at 08:04 o'clock

Member: Tezzla
Tezzla Mar 09, 2021 at 13:05:09 (UTC)
Goto Top
Moin,

das -whatif solltest du entfernen, wenn du die Objekte auch bearbeiten möchtest und Powershell nicht nur so tun soll, als ob.
Genau das bewirkt der Parameter nämlich: Einen Lauf simulieren.

VG
Member: GarfieldBonn
GarfieldBonn Mar 09, 2021 at 13:11:59 (UTC)
Goto Top
Die Gruppen beider Computer einmal verglichen? Wenn der bereits Mitglied in den selben Gruppen sein sollte....

Ansonsten mal write-Host $Group; write-Host $ComputerTarget vor dem Add-Befehl damit du den Inhalt der Variablen sehen kannst.
Member: FullMetal
FullMetal Mar 09, 2021 at 13:40:31 (UTC)
Goto Top
Hi GarfieldBonn,

du meinst so:

$ComputerSource = 'computer1'  
$ComputerTarget = 'computer2'  

$ComputerSourceObject = (Get-ADComputer $ComputerSource -Properties memberOf | Select-Object -ExpandProperty memberof)
foreach ($Group in $ComputerSourceObject.MemberOf) {
	write-Host $Group; write-Host $ComputerTarget    
	Add-ADGroupMember -Identity $Group -Members $ComputerTarget -Verbose
}

Funktioniert leider auch nicht.
Das ComputerTarget ist ein neuer PC, der ist also nur Mitglied von "Domain Computers". Könnte dass das Problem sein, das eine Gruppe identisch ist?

Bevor einer Fragen muss: beide Computer sind in der selben OU und ich führe das Skript auf dem DC aus.
Member: GarfieldBonn
GarfieldBonn Mar 09, 2021 updated at 14:22:46 (UTC)
Goto Top
$Computer1 = Read-Host "Computer1"
$Computer2 = Read-Host "Computer2"

$SRC = Get-ADComputer -Filter "name -like '$Computer1*'" -Properties memberOf
$DST = Get-ADComputer -Filter "name -like '$Computer2*'" -Properties MemberOf

foreach ($Group in $SRC.memberOf) {

Add-ADGroupMember -Identity $Group -Member $DST

Write-Output $Group
}

ggf. Errorvariable auf silentlycontinue setzen oder gleiche Gruppen mit If-Abfrag übergehen
Member: FullMetal
FullMetal Mar 09, 2021 at 16:10:14 (UTC)
Goto Top
Keine Ahnung wieso, aber der Code so wie er da steht hat alle Computer-Objekte in der gesamten Domäne in sehr viele (nicht alle) Gruppen gepackt. Und ich hab 30Minuten gebraucht das wiederherzustellen.
Ich hab eigentlich ganz klar zwei Computer benannt. Wieso er jetzt alle Computer-Objekte angesprochen hat kann ich mir nicht erklären.

Wer Langeweile hat, oder man seinen Arbeitgeber sabotieren möchte - einfach den Code da ausführen.
Member: GarfieldBonn
GarfieldBonn Mar 09, 2021 at 18:15:34 (UTC)
Goto Top
das sollte so nicht sein. face-sad


-whatif und mit write-host $SRC und $DST und $Group vorm scharf schalten immer mal schauen, was der Kode so wirklich macht