Jump to content

Gruppenmitglieder mit bestimmten Merkmalen in einer Gruppe vereinen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen, 

 

ich bin nach längerer Suche und vielen Versuchen jetzt leider doch genötigt, mal zu fragen, ob jemand noch eine Idee hat für einen Neuling hat. 

 

Kurze Einführung: 

Ich habe von einem Kollegen, der abhanden gekommen ist, ein Skript übernommen, welches wilde Dinge macht.

Leider ist es nicht sehr effizient, so dass sich das Skript bei der Anzahl an AD Mitgliedern (mehrere tausend und auch mehrere tausend Gruppen) mittlerweile quasi selbst überholt, da es ca. alle 30 Minuten laufen muss. 

Ich versuche es generell neu aufzubauen, aber bis dahin muss ich mir eine Krücke ausdenken.

Das AD ist alt "klassisch" mit OUs aufgebaut.

Folgende Aufgaben erfüllt das Skript:

  • AD Mitglied ist in der Sub OU "NA-Finanzen" in der Sicherheitsgruppe "NA-Finanzen-Orga-Applikation" (darf die Abteilung selbst hinzufügen; "NA" variiert über die Sub-OUs)
    • gleiches AD Mitglied hat eine E-Mail-Adresse xy"@contoso.com"
    • gleiches AD Mitglied hat im Büro "Texas" eingetragen
    • gleiches AD Mitglied muss "enabled" sein 
  • wenn o.g. vier Bedingungen erfüllt sind, füge es der zentralen Sicherheitsgruppe "Globalefinanzen-Orga-Applikation" hinzu
  • wenn eine der Bedingungen nicht mehr erfüllt ist, entferne das AD Mitglied aus der Gruppe "Globalefinanzen-Orga-Applikation"

 

Von diesen Sub OUs gibt es aktuell 34, immerhin alle gleich aufgebaut.

 

Das Skript ist entsprechend mit so vielen if/else und Schleifen versehen, mit try/catch über alles, und fragt die Gruppen rekursiv ab, dass es nicht zuuuu schnell läuft. 

 

Meine Idee war daher irgendwie eher über ein Array zu arbeiten, ähnlich folgendem: wobei da noch die Mail-Prüfung fehlt, aber es funktioniert schon nicht mehr, wenn Office abgefragt wird. 

Sorry, wie gesagt, als Neuling vielleicht auch ein wenig zu viel auf einmal.

 

Codeausschnitt:

$ZentraleGruppe = "Globalefinanzen-Orga-Applikation"
$Gruppen = (Get-ADGroup -Filter {Name -like "*-Finanzen-Orga-App*" | select-object -ExpandProperty name)
$Mitglieder1Tex=@(Get-ADGroupMember $Gruppen | Get-ADUser | Where {$_.enabled -eq 'true'-and $_.physicalDeliveryOfficeName -eq 'Texas' } | Foreach{$_.SamAccountname})
Add-ADGroupMember $ZentraleGruppe -Members $Mitglieder1Tex

 

Ich hoffe ich habe jetzt erstmal nichts vergessen.

 

Vielen Dank schon mal, dass Ihr überhaupt bis hierhin gelesen habt!

Link zu diesem Kommentar
vor 53 Minuten schrieb Bernado:

Meine Idee war daher irgendwie eher über ein Array zu arbeiten, ähnlich folgendem: wobei da noch die Mail-Prüfung fehlt, aber es funktioniert schon nicht mehr, wenn Office abgefragt wird.

Gute Idee. Würd ich genau so machen. Wenn ich das nicht falsch verstanden habe, solltest Du mit:

$SearchBase = 'NA-Finanzen...'
$AllUsersList = Get-ADUser -Filter * -SearchBase $SearchBase -Properties MemberOf, physicalDeliveryOfficeName, mail

... alles Nötige im Array $AllUsersList haben, was Du für Deine Prüfungen brauchst, oder? ;-) ... ich würde erwarten, dass das die Sache ewtas beschleunigen sollte.  ($SearchBase musst Du natürlich entsprechend korrekt setzen)

bearbeitet von BOfH_666
Link zu diesem Kommentar

Ahh! Super, danke euch beiden.

 

Zitat

$SearchBase = 'NA-Finanzen...'

 

Ja, das stimmt, wenn das nicht variieren würde. 

Also es gibt 34 OUs mit "Finanzen".

Die Searchbase müsste also Contoso sein und er müssten in den Sub-OUs die '*-Finanzen-Orga-...*' suchen.

 

Das wollte ich ja mit

$Gruppen = (Get-ADGroup -Filter {Name -like "*-Finanzen-Orga-App*" | select-object -ExpandProperty name)

versuchen.

 

Ich bin leider im erklären schlecht. Pardon.

 

 

Beispiel:

 

  • Contoso
    • NA-Finanzen
      • Benutzer
        • Meyer, Fritz (Office=Texas, Memberof=NA-Finanzen-Orga-Applikation, Mail='fritz.meyer@contoso.com')
        • ...
      • Gruppen
        • NA-Finanzen-Orga-Applikation
    • US-Finanzen
    • RE-Finanzen
    • PP-Finanzen
    • Zentrale
      • Gruppen
        • Globalefinanzen-Orga-Applikation

 

 

Link zu diesem Kommentar

Wenn Du Dir die Gruppen in ein Array packst, kannst Du mit einer Foreach-Schleife drüber iterieren. Wenn Du Select-Object -ExpandProperty benutzt, machst Du aus vielseitigen Objekten dumme Strings.  ;-) In Deinem Code-Beispiel hast Du zwei AD-Abfragen, von welcher eine noch eine weitere geschachtelte und direkt gefilterte AD-Abfrage enthält. Ich hätte versucht, das eventuell zu vermeiden. Du könntest die Abfrage auch weiter "oben" absetzen und somit erstmal ALLE Daten für ALLE relevanten Gruppen und Anwender einsammeln. Dann brauchst Du nicht 34 mal das AD durchhühnern. ;-):D

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...