Benutzer mit den meisten Antworten
Zwei OU´s abgleichen, verschieden namige Gruppen synchron halten

Frage
-
Hallo liebe Community,
vor einigen Monaten konnte ich schonmal ein Skript mit jemanden hier erarbeiten das wir noch immer in unserere Firma einsetzen und so aussieht:
#Beschreibung: # Die Gruppen von 2 OUs werden Synchron gehalten # Wenn eine Gruppe aus der Quell OU in der Ziel OU nicht existiert wird Sie angelegt # Die Mitglieder aus den Gruppe der Quell OU werden in die entsprechenden Namensgleichen Gruppen kopiert # Die Mitglieder die in der Namensgleichen Gruppe der Ziel OU überzählig sind, werden aus dieser entfernt # Quest Active Directory Snapin laden, wenn es noch nicht geladen wurde If ( -not (Get-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue)) { Add-PSSnapIn -Name "Quest.ActiveRoles.ADManagement" } #Festlegen der Quell_OU und Ziel_OU $Quell_OU = "OU=VG-AT,OU=OM,OU=Groups,OU=Resources,DC=com,DC=firma,DC=net" $Ziel_OU = "OU=GROUPS,OU=ORG-EDV,OU=SL,DC=at,DC=firma,DC=net" # Alle Gruppen aus der Quell_OU holen ForEach($QuellGruppe in Get-QADGroup -SearchRoot $Quell_OU) { # Gruppen Pfad der Ziel-Gruppe Konstruieren $ZielGruppe = "CN=" + $QuellGruppe.Name + "," + $Ziel_OU # Wenn die Gruppe mit dem selben Namen in der Ziel_OU nicht existiert wird sie angelegt # Damit wird sichergestellt das die Gruppe im Ziel vorhanden ist If (-not (Get-QADGroup $ZielGruppe)) { #Identische Gruppen in der Ziel_OU anlegen (falls nicht gewünscht, kommentieren) New-QADGroup -GroupType $QuellGruppe.GroupType -GroupScope $QuellGruppe.GroupScope -SamAccountName $QuellGruppe.SamAccountName -Name $QuellGruppe.Name -Parentcontainer $Ziel_OU } # Die Member aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Mitglieder in die Ziel-Gruppe Kopieren # Alle Mitglieder der Quell-Gruppe durchlaufen ForEach($DNMember in $DNQuellMember) { # Testen ob der User noch nicht in der Ziel-Gruppe enthalten ist If(-not ($DNZielMember -contains $DNMember)) { # Mitglied ist noch nicht in der Ziel-Gruppe # Mitglied in die Ziel-Gruppe einfügen Write-Host "Hinzufügen von Member $DNMember in die Gruppe: $ZielGruppe" Add-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } # Die Member erneut aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Überzählige Mitglieder aus der Ziel Gruppe entfernen # Alle MItglieder der Zielgruppe durchlaufen ForEach($DNMember in $DNZielMember) { # Testen ob der User nicht in der Quell Gruppe enthalten ist If(-not ($DNQuellMember -contains $DNMember) -and (-Not($DNMember.StartsWith("Gruppenuser-")))) { # Mitglied ist in der Ziel-Gruppe überzählig # Mitglied wird aus der Ziel-Gruppe entfernt Write-Host "Ich entfernen den Member: $DNMember von der Gruppe: $ZielGruppe" Remove-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } }
Nun kommt aber ein Wunsch von unserem IT-Leiter hinzu und zwar werden alle in der OU von der Domäne at.firma.net befindlichen Gruppen umbenannt, bzw. es werden die zwei vordersten Zeichen (zz) gelöscht. Die Gruppen in der OU von der Domäne com.firma.net bleiben jedoch unverändert.
z.B.: In der Domäne at.firma.net gibt es die Gruppe zzat-test diese wird umbenannt in at-test, jedoch in der Domäne com.Firma.net heißt die Gruppe noch zzat-test. Das Skript ist aber dazu ausgelegt nur gleichnamige Gruppen synchron zu halten...hab mich nun heute selber daran versucht und folgendes auf die Beine gestellt, was aber so gar nicht klappt:
#Beschreibung: # Die Gruppen von 2 OUs werden Synchron gehalten # Wenn eine Gruppe aus der Quell OU in der Ziel OU nicht existiert wird Sie angelegt # Die Mitglieder aus den Gruppe der Quell OU werden in die entsprechenden Namensgleichen Gruppen kopiert # Die Mitglieder die in der Namensgleichen Gruppe der Ziel OU überzählig sind, werden aus dieser entfernt # Quest Active Directory Snapin laden, wenn es noch nicht geladen wurde If ( -not (Get-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue)) { Add-PSSnapIn -Name "Quest.ActiveRoles.ADManagement" } #Festlegen der Quell_OU und Ziel_OU $Quell_OU = "OU=VG-AT,OU=OM,OU=Groups,OU=Resources,DC=com,DC=firma,DC=net" $Ziel_OU = "OU=GROUPS,OU=ORG-EDV,OU=SL,DC=at,DC=firma,DC=net" # Alle Gruppen aus der Quell_OU holen ForEach($QuellGruppe in Get-QADGroup -SearchRoot $Quell_OU) { #Wenn Name der Quellgruppe mit zz beginnt dann, die zwei z´s entfernen if($QuellGruppe.Name.StartsWith("zz")){ # Gruppenpfad der Ziel-Gruppe $ZielGruppe = "CN=" + $QuellGruppe.Name.Remove(0,2) + "," + $Ziel_OU } # Wenn die Gruppe mit dem selben Namen in der Ziel_OU nicht existiert wird sie angelegt # Damit wird sichergestellt das die Gruppe im Ziel vorhanden ist If (-not (Get-QADGroup $ZielGruppe)) { #Identische Gruppen in der Ziel_OU anlegen (falls nicht gewünscht, kommentieren) New-QADGroup -GroupType $QuellGruppe.GroupType -GroupScope $QuellGruppe.GroupScope -SamAccountName $QuellGruppe.SamAccountName -Name $QuellGruppe.Name -Parentcontainer $Ziel_OU } # Die Member aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Mitglieder in die Ziel-Gruppe Kopieren # Alle Mitglieder der Quell-Gruppe durchlaufen ForEach($DNMember in $DNQuellMember) { # Testen ob der User noch nicht in der Ziel-Gruppe enthalten ist If(-not ($DNZielMember -contains $DNMember)) { # Mitglied ist noch nicht in der Ziel-Gruppe # Mitglied in die Ziel-Gruppe einfügen Write-Host "Hinzufügen von Member $DNMember in die Gruppe: $ZielGruppe" Add-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } # Die Member erneut aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Überzählige Mitglieder aus der Ziel Gruppe entfernen # Alle MItglieder der Zielgruppe durchlaufen ForEach($DNMember in $DNZielMember) { # Testen ob der User nicht in der Quell Gruppe enthalten ist If(-not ($DNQuellMember -contains $DNMember) -and (-Not($DNMember.StartsWith("Gruppenuser-")))) { # Mitglied ist in der Ziel-Gruppe überzählig # Mitglied wird aus der Ziel-Gruppe entfernt Write-Host "Ich entfernen den Member: $DNMember von der Gruppe: $ZielGruppe" Remove-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } }
Hab also eigentlich nur:
#Wenn Name der Quellgruppe mit zz beginnt dann, die zwei z´s entfernen if($QuellGruppe.Name.StartsWith("zz")){ # Gruppenpfad der Ziel-Gruppe $ZielGruppe = "CN=" + $QuellGruppe.Name.Remove(0,2) + "," + $Ziel_OU }
hinzugefügt. Das wäre aber wohl zu simpel gewesen...Leider funktioniert so die Synchronisierung nicht, es gibt in der com.firma.net auch Gruppen die wiederum Gruppen enthalten die mit zzat-... beginnen welche auch nicht synchronisiert werden können...das ganze stellt sich mittlerweile als sehr komplex (also für mich) heraus.
Ich hoffe man kann einigermaßen verstehen worauf ich hinaus will und was gesucht ist und bitte um eine kleinen Rat, Vorschlag oder Hilfestellung wie ich das bewerkstelligen könnte.
Mit freundlichen Grüßen,
Menthoxx
- Bearbeitet Menthoxx Montag, 4. November 2013 17:47
Antworten
-
So müsste es gehen:
#Beschreibung: # Die Gruppen von 2 OUs werden Synchron gehalten # Wenn eine Gruppe aus der Quell OU in der Ziel OU nicht existiert wird Sie angelegt # Die Mitglieder aus den Gruppe der Quell OU werden in die entsprechenden Namensgleichen Gruppen kopiert # Die Mitglieder die in der Namensgleichen Gruppe der Ziel OU überzählig sind, werden aus dieser entfernt # Präfix der von den Gruppen abgeschnitten oder zugefügt werden soll $Präfix = "zz" # Quest Active Directory Snapin laden, wenn es noch nicht geladen wurde If ( -not (Get-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue)) { Add-PSSnapIn -Name "Quest.ActiveRoles.ADManagement" } #Festlegen der Quell_OU und Ziel_OU $Quell_OU = "OU=VG-AT,OU=OM,OU=Groups,OU=Resources,DC=com,DC=firma,DC=net" $Ziel_OU = "OU=GROUPS,OU=ORG-EDV,OU=SL,DC=at,DC=firma,DC=net" # Alle Gruppen aus der Quell_OU holen ForEach($QuellGruppe in Get-QADGroup -SearchRoot $Quell_OU) { # Gruppen Pfad der Ziel-Gruppe Konstruieren und den namen der Zielgruppe If ($QuellGruppe.Name.Startswith($Präfix)) { # Name der Zielgruppen erstellen ohne die führenden Zeichen $ZielGruppenName = $QuellGruppe.Name.Remove(0,$Präfix.Length) # Zielgruppen Pfad erstellen ohne die führenden Zeichen $ZielGruppe = "CN=" + $ZielGruppenName + "," + $Ziel_OU } Else { # Zielgruppen Pfad erstellen $ZielGruppe = "CN=" + $QuellGruppe.Name + "," + $Ziel_OU # Name der Zielgruppen kopieren $ZielGruppenName = $QuellGruppe.Name } # Wenn die Gruppe mit dem selben Namen in der Ziel_OU nicht existiert wird sie angelegt # Damit wird sichergestellt das die Gruppe im Ziel vorhanden ist If (-not (Get-QADGroup $ZielGruppe)) { #Identische Gruppen in der Ziel_OU anlegen (falls nicht gewünscht, kommentieren) ###################### ACHTUNG! ################################### # Ich habe im folgenden Befehl den SamAccountName = Name gesetzt! (Es ist in den Meisten ADs so geregelt, das SamAccountName = Name ist) # Wenn in eurem AD nicht SamAccountName = Name ist, müssen wir den SamAccountName genauso wie den Namen abschneiden!?? New-QADGroup -GroupType $QuellGruppe.GroupType -GroupScope $QuellGruppe.GroupScope -SamAccountName $ZielGruppenName -Name $ZielGruppenName -Parentcontainer $Ziel_OU } # Die Member aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Mitglieder in die Ziel-Gruppe Kopieren # Alle Mitglieder der Quell-Gruppe durchlaufen ForEach($DNMember in $DNQuellMember) { # Den namen der Zielgruppemember konstruieren If ($DNMember.Startswith($Präfix)) { # Name des Zielmember erstellen ohne die führenden Zeichen $DNMember = $DNMember.Remove(0,$Präfix.Length) } # Testen ob der User noch nicht in der Ziel-Gruppe enthalten ist If(-not ($DNZielMember -contains $DNMember)) { # Mitglied ist noch nicht in der Ziel-Gruppe # Mitglied in die Ziel-Gruppe einfügen Write-Host "Hinzufügen von Member $DNMember in die Gruppe: $ZielGruppe" Add-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } # Die Member erneut aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Überzählige Mitglieder aus der Ziel Gruppe entfernen # Alle MItglieder der Zielgruppe durchlaufen ForEach($DNMember in $DNZielMember) { # Den präfix den Gruppennamen hinzufügen $DNMember = $Präfix + $DNMember # Testen ob der User nicht in der Quell Gruppe enthalten ist If(-not ($DNQuellMember -contains $DNMember) -and (-Not($DNMember.StartsWith("Gruppenuser-")))) { # Mitglied ist in der Ziel-Gruppe überzählig # Mitglied wird aus der Ziel-Gruppe entfernt Write-Host "Ich entfernen den Member: $DNMember von der Gruppe: $ZielGruppe" Remove-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } }
Ich habe die Variable $Präfix eingeführt. Den Präfix brachat du nur an dieser einen stelle ändern.
Bei der Zeile .....
If(-not ($DNQuellMember -contains $DNMember) -and (-Not($DNMember.StartsWith("Gruppenuser-")))) {
..... bin ich mir nicht sicher ob wir das mit dem -Not($DNMember.StartsWith("Gruppenuser-")) so lassen können.
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)- Bearbeitet Peter Kriegel Mittwoch, 6. November 2013 06:43
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 22. November 2013 12:14
Alle Antworten
-
Hallo Menthoxx,
ich bins wieder der Peter! ;-))
So müsst es tun, gehn, haben, sollen, sein.... (ungetestet !!!):
#Beschreibung: # Die Gruppen von 2 OUs werden Synchron gehalten # Wenn eine Gruppe aus der Quell OU in der Ziel OU nicht existiert wird Sie angelegt # Die Mitglieder aus den Gruppe der Quell OU werden in die entsprechenden Namensgleichen Gruppen kopiert # Die Mitglieder die in der Namensgleichen Gruppe der Ziel OU überzählig sind, werden aus dieser entfernt # Quest Active Directory Snapin laden, wenn es noch nicht geladen wurde If ( -not (Get-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue)) { Add-PSSnapIn -Name "Quest.ActiveRoles.ADManagement" } #Festlegen der Quell_OU und Ziel_OU $Quell_OU = "OU=VG-AT,OU=OM,OU=Groups,OU=Resources,DC=com,DC=firma,DC=net" $Ziel_OU = "OU=GROUPS,OU=ORG-EDV,OU=SL,DC=at,DC=firma,DC=net" # Alle Gruppen aus der Quell_OU holen ForEach($QuellGruppe in Get-QADGroup -SearchRoot $Quell_OU) { # Gruppen Pfad der Ziel-Gruppe Konstruieren und den namen der Zielgruppe If ($QuellGruppe.Name.Startswith("zz")) { # Zielgruppen Pfad erstellen ohne die führenden 2 Zeichen $ZielGruppe = "CN=" + $QuellGruppe.Name.Remove(0,2) + "," + $Ziel_OU # Name der Zielgruppen erstellen ohne die führenden 2 Zeichen $ZielGruppenName = $QuellGruppe.Name.Remove(0,2) } Else { # Zielgruppen Pfad erstellen $ZielGruppe = "CN=" + $QuellGruppe.Name + "," + $Ziel_OU # Name der Zielgruppen kopieren $ZielGruppenName = $QuellGruppe.Name } # Wenn die Gruppe mit dem selben Namen in der Ziel_OU nicht existiert wird sie angelegt # Damit wird sichergestellt das die Gruppe im Ziel vorhanden ist If (-not (Get-QADGroup $ZielGruppe)) { #Identische Gruppen in der Ziel_OU anlegen (falls nicht gewünscht, kommentieren) ###################### ACHTUNG! ################################### # Ich habe im folgenden Befehl den SamAccountName = Name gesetzt! (Es ist in den Meisten ADs so geregelt, das SamAccountName = Name ist) # Wenn in eurem AD nicht SamAccountName = Name ist, müssen wir den SamAccountName genauso wie den Namen abschneiden!?? New-QADGroup -GroupType $QuellGruppe.GroupType -GroupScope $QuellGruppe.GroupScope -SamAccountName $ZielGruppenName -Name $ZielGruppenName -Parentcontainer $Ziel_OU } # Die Member aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Mitglieder in die Ziel-Gruppe Kopieren # Alle Mitglieder der Quell-Gruppe durchlaufen ForEach($DNMember in $DNQuellMember) { # Testen ob der User noch nicht in der Ziel-Gruppe enthalten ist If(-not ($DNZielMember -contains $DNMember)) { # Mitglied ist noch nicht in der Ziel-Gruppe # Mitglied in die Ziel-Gruppe einfügen Write-Host "Hinzufügen von Member $DNMember in die Gruppe: $ZielGruppe" Add-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } # Die Member erneut aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Überzählige Mitglieder aus der Ziel Gruppe entfernen # Alle MItglieder der Zielgruppe durchlaufen ForEach($DNMember in $DNZielMember) { # Testen ob der User nicht in der Quell Gruppe enthalten ist If(-not ($DNQuellMember -contains $DNMember) -and (-Not($DNMember.StartsWith("Gruppenuser-")))) { # Mitglied ist in der Ziel-Gruppe überzählig # Mitglied wird aus der Ziel-Gruppe entfernt Write-Host "Ich entfernen den Member: $DNMember von der Gruppe: $ZielGruppe" Remove-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } }
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet) -
Hallo Peter,
du bist wohl wieder einmal meine Rettung! (;
Also ich habe auch mit deinem Vorschlag noch ein Problem und zwar:
In der Domäne 1 gibt es Gruppen in Gruppen (alle beginnen mit zz) und in unserer Domäne gibt es auch Gruppen in Gruppen (das zz ist schon entfernt). Nun denkt das Skript, ach da ist ja ein neues Mitglied (zz-Gruppe) in der Gruppe in Domäne 1 dann will er diese natürlich auch in der Gruppe in Domäne 2 anlegen, aber dort ist ja schon eine Gruppe ohne zz
Dann kommt die Meldung:
Add-QADGroupMember : Der Server kann die Anforderung nicht ausführen. (Ausnahme von HRESULT: 0x80072035)
Vllt. noch ein Beispiel (ist nicht einfach zu erklären):
Domäne 1:
Gruppe: zzat-test
Mitglieder: zzat-gruppe1, zzat-gruppe2, zzat-gruppe3 (sind alles Gruppen)
Domäne 2:
Gruppe: at-test
Mitglieder: at-gruppe1, at-gruppe2, at-gruppe3 (sind alles Gruppen)
noch ein Screen von Domäne 2:
Und von Domäne 1:
Rein theoretisch sind das alles die selben Gruppen und Mitglieder, also müsste er gar nix hinzufügen, versucht es aber :s
Achja die Zeile:
# Wenn die Gruppe mit dem selben Namen in der Ziel_OU nicht existiert wird sie angelegt # Damit wird sichergestellt das die Gruppe im Ziel vorhanden ist If (-not (Get-QADGroup $ZielGruppe)) { #Identische Gruppen in der Ziel_OU anlegen (falls nicht gewünscht, kommentieren) ###################### ACHTUNG! ################################### # Ich habe im folgenden Befehl den SamAccountName = Name gesetzt! (Es ist in den Meisten ADs so geregelt, das SamAccountName = Name ist) # Wenn in eurem AD nicht SamAccountName = Name ist, müssen wir den SamAccountName genauso wie den Namen abschneiden!?? New-QADGroup -GroupType $QuellGruppe.GroupType -GroupScope $QuellGruppe.GroupScope -SamAccountName $ZielGruppenName -Name $ZielGruppenName -Parentcontainer $Ziel_OU }
verwenden wir momentan nicht.
Liebe Grüße,
Menthoox
- Bearbeitet Menthoxx Dienstag, 5. November 2013 10:03
-
Ja das ist Komplex.
ich habe im Moment keine Ruhe mich damit zu beschäftigen.Melde mich später (Morgen) nochmal.
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet) -
So müsste es gehen:
#Beschreibung: # Die Gruppen von 2 OUs werden Synchron gehalten # Wenn eine Gruppe aus der Quell OU in der Ziel OU nicht existiert wird Sie angelegt # Die Mitglieder aus den Gruppe der Quell OU werden in die entsprechenden Namensgleichen Gruppen kopiert # Die Mitglieder die in der Namensgleichen Gruppe der Ziel OU überzählig sind, werden aus dieser entfernt # Präfix der von den Gruppen abgeschnitten oder zugefügt werden soll $Präfix = "zz" # Quest Active Directory Snapin laden, wenn es noch nicht geladen wurde If ( -not (Get-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue)) { Add-PSSnapIn -Name "Quest.ActiveRoles.ADManagement" } #Festlegen der Quell_OU und Ziel_OU $Quell_OU = "OU=VG-AT,OU=OM,OU=Groups,OU=Resources,DC=com,DC=firma,DC=net" $Ziel_OU = "OU=GROUPS,OU=ORG-EDV,OU=SL,DC=at,DC=firma,DC=net" # Alle Gruppen aus der Quell_OU holen ForEach($QuellGruppe in Get-QADGroup -SearchRoot $Quell_OU) { # Gruppen Pfad der Ziel-Gruppe Konstruieren und den namen der Zielgruppe If ($QuellGruppe.Name.Startswith($Präfix)) { # Name der Zielgruppen erstellen ohne die führenden Zeichen $ZielGruppenName = $QuellGruppe.Name.Remove(0,$Präfix.Length) # Zielgruppen Pfad erstellen ohne die führenden Zeichen $ZielGruppe = "CN=" + $ZielGruppenName + "," + $Ziel_OU } Else { # Zielgruppen Pfad erstellen $ZielGruppe = "CN=" + $QuellGruppe.Name + "," + $Ziel_OU # Name der Zielgruppen kopieren $ZielGruppenName = $QuellGruppe.Name } # Wenn die Gruppe mit dem selben Namen in der Ziel_OU nicht existiert wird sie angelegt # Damit wird sichergestellt das die Gruppe im Ziel vorhanden ist If (-not (Get-QADGroup $ZielGruppe)) { #Identische Gruppen in der Ziel_OU anlegen (falls nicht gewünscht, kommentieren) ###################### ACHTUNG! ################################### # Ich habe im folgenden Befehl den SamAccountName = Name gesetzt! (Es ist in den Meisten ADs so geregelt, das SamAccountName = Name ist) # Wenn in eurem AD nicht SamAccountName = Name ist, müssen wir den SamAccountName genauso wie den Namen abschneiden!?? New-QADGroup -GroupType $QuellGruppe.GroupType -GroupScope $QuellGruppe.GroupScope -SamAccountName $ZielGruppenName -Name $ZielGruppenName -Parentcontainer $Ziel_OU } # Die Member aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Mitglieder in die Ziel-Gruppe Kopieren # Alle Mitglieder der Quell-Gruppe durchlaufen ForEach($DNMember in $DNQuellMember) { # Den namen der Zielgruppemember konstruieren If ($DNMember.Startswith($Präfix)) { # Name des Zielmember erstellen ohne die führenden Zeichen $DNMember = $DNMember.Remove(0,$Präfix.Length) } # Testen ob der User noch nicht in der Ziel-Gruppe enthalten ist If(-not ($DNZielMember -contains $DNMember)) { # Mitglied ist noch nicht in der Ziel-Gruppe # Mitglied in die Ziel-Gruppe einfügen Write-Host "Hinzufügen von Member $DNMember in die Gruppe: $ZielGruppe" Add-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } # Die Member erneut aus den Gruppen holen. # Um die Listen miteinander vergleichen zu können, benötigen wir nur den Name! $DNQuellMember = Get-QADGroupMember $QuellGruppe | ForEach-Object { $_.Name } $DNZielMember = Get-QADGroupMember $ZielGruppe | ForEach-Object { $_.Name} # Überzählige Mitglieder aus der Ziel Gruppe entfernen # Alle MItglieder der Zielgruppe durchlaufen ForEach($DNMember in $DNZielMember) { # Den präfix den Gruppennamen hinzufügen $DNMember = $Präfix + $DNMember # Testen ob der User nicht in der Quell Gruppe enthalten ist If(-not ($DNQuellMember -contains $DNMember) -and (-Not($DNMember.StartsWith("Gruppenuser-")))) { # Mitglied ist in der Ziel-Gruppe überzählig # Mitglied wird aus der Ziel-Gruppe entfernt Write-Host "Ich entfernen den Member: $DNMember von der Gruppe: $ZielGruppe" Remove-QADGroupMember -Identity $ZielGruppe -Member $DNMember } } }
Ich habe die Variable $Präfix eingeführt. Den Präfix brachat du nur an dieser einen stelle ändern.
Bei der Zeile .....
If(-not ($DNQuellMember -contains $DNMember) -and (-Not($DNMember.StartsWith("Gruppenuser-")))) {
..... bin ich mir nicht sicher ob wir das mit dem -Not($DNMember.StartsWith("Gruppenuser-")) so lassen können.
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)- Bearbeitet Peter Kriegel Mittwoch, 6. November 2013 06:43
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 22. November 2013 12:14
-
Guten Morgen Peter,
also das Skript läuft, hab es leicht angepasst mit dem Block:
# Wenn Member mit at-om beginnt (sind die Gruppen), ... If ($DNMember.Startswith("at-om")) { # dann den Präfix hinzufügen $DNMember = $Präfix + $DNMember }
Hinzufügen und entfernen von Member tut sich aber noch nichts, es kommt immer wieder die Meldung:
Remove-QADGroupMember : Cannot resolve directory object for the given identity: '.......'.
aber immerhin wählt er zum hinzufügen/entfernen die richtigen Member schonmal aus! (:
Aber warum findet er die Member nicht..? Hab sicherheitshalber mal am Anfang des Skripts "Connect-QADService -Service com.firma.net" hinzugefügt, ohne kann er nicht mal die Gruppen von der Domäne 1 auslesen...ich denke da gibt es noch ein Problem.
Vielen Dank für deine tolle Hilfe!
EDIT: Hab es nun hinbekommen, mit
Connect-QADService at.firma.net Remove-QADGroupMember -Identity $ZielGruppe -Member $DNMember Connect-QADService com.firma.net
gibt es auch eine einfachere methode? (; Oder kann man sich iwie auf 2 Domänen gleichzeitig verbinden?- Bearbeitet Menthoxx Mittwoch, 6. November 2013 09:42
-
Bitte den Präfix nur am anfang des Scriptes ändern, sonnst nichts!
Der Präfix wird im Script mehrmals benutzt nicht nur an einer stelle!
# Präfix der von den Gruppen abgeschnitten oder zugefügt werden soll $Präfix = "zz"
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet) -
Ich weiß nicht was du gemacht hat! Du widersprichst dir!
also das Skript läuft, hab es leicht angepasst mit dem Block:
# Wenn Member mit at-om beginnt (sind die Gruppen), ... If ($DNMember.Startswith("at-om")) { # dann den Präfix hinzufügen $DNMember = $Präfix + $DNMember }
Hast du es jetzt nun anpasst wie im grauen Zitat Kasten oder hast du nur die eine Stelle geändert wie folgend gezeigt?
# Präfix der von den Gruppen abgeschnitten oder zugefügt werden soll $Präfix = "zz"
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)- Bearbeitet Peter Kriegel Mittwoch, 6. November 2013 12:45
-
Hallo Menthoxx,
bist Du weitergekommen?
Gruss,
Alex
Alex Pitulice, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.