The estimated reading time 5 minutes
Vor einiger Zeit hatte ich beim Kunden folgende Anfrage: es sollte einen speziellen Bereich auf dem Dateiserver geben, welcher nur von Keyuser einsehbar ist um dort per Textdatei AD Gruppenzuweisungen zu machen. Hörte sich ganz interessant an, also habe ich mich hingesetzt und folgendes Skript geschrieben. Es sollte an Hand des Dateinames die entsprechende AD Gruppe finden und dann die Benutzer (SamAccountNames) hinzufügen. Außerdem sollte die Gruppe vorher bereinigt werden, damit keine „Leichen“ innerhalb der Gruppe zurück bleiben. Für den Zugriff auf die Textdateien wurden natürlich spezielle NTFS Berechtigungen vergeben. Ansonsten haben die Benutzer keine erhöhten Berechtigungen im Active Directory, da das Skript über eine Aufgabe beliebig oft am Tag laufen kann und der ausführende Benutzer die Berechtigung zur Änderung im AD besitzt. Ich denke dies ist ein einfacher und dennoch sicherer Weg AD Gruppendelegation zu realisieren.
Link zum script: https://github.com/blog-it-koehler-com/manageadgroupwithtxt
Vor dieses Skript seinen Dienst erledigt, benötigt es jedoch etwas Vorbereitung auf dem Server der dies übernehmen soll:
1. ActiveDirectory PowerShell Modul muss installiert sein
2. Benutzer muss das Recht „Anmelden als Stapelverarbeitungsauftrag“ auf dem Server haben
3. Der Batch-Benutzer muss Zugriff auf das AD haben und das Recht Gruppen zu ändern
4. Eine Freigabe auf einem beliebigen Server für die Textdateien
5. Einen Pfad für das Log-Protokoll
6. das Skript selbst
Bevor wir in die Benutzung des Skriptes einsteigen hier noch das Herz der Funktion mit einigen Erläuterungen:
$files = Get-ChildItem \\dc01\adgroup\*.txt -Recurse $adgroupprefix = "g-demo-" ## get content of every file and its name foreach($file in $files){ $name = ($file).Name.ToString() $noextension = ($name.Substring(0,$name.Length-4)) $path = ($file).FullName $adgroup = $adgroupprefix+$noextension $samaccounts = Get-Content "$path" Write-Host "### $adgroup ###" ### get all user from ad group and remove them $tempmembers = Get-ADGroupmember -Identity $adgroup foreach($tempmember in $tempmembers){ $name = ($tempmember).name Write-Host "Removing user: $name" -ForegroundColor Green Remove-ADGroupMember -Identity $adgroup -Members $tempmember -Confirm:$false } ### adding all users from txt files foreach ($newmember in $samaccounts){ Write-host "Adding $newmember to $adgroup" -ForegroundColor Green Add-ADGroupMember -Identity $adgroup -Members $newmember } }
Also, wie funktioniert nun die konkrete Anwendung? Schauen wir uns doch mal die Skript Umgebung an.
Im ActiveDirectory müssen natürlich die entsprechenden Gruppen ebenfalls angelegt sein (TXT Dateinamen).
HINWEIS: mit dem Namen der Textdatei wird die Zuordnung zu den AD Gruppen geregelt. Das Skript nimmt an, dass es einen AD Gruppen Zusatz gibt, deshalb wird im Verlauf der Name von TXT Dateiname „group1“ zu „g-demo-group1“. Natürlich müssen die AD Gruppen in dieses Schema passen, da sonst keine Zuordnung zu Gruppen stattfinden kann. Deshalb gilt es eine Variable „adgroupprefix“ zu definieren.
Um nun Benutzer in die Gruppe aufzunehmen kann der SamAccountName einfach in eine der TXT-Dateien eingetragen werden. ( es können auch andere AD Attribute verwendet werden, allerdings ist der SamAccountName die einfachste Variante). Folgende Attribute können genutzt werden:
Die komplette Version des Skriptes erzeugt ein kleines Log, welches anzeigt, welche AD Benutzer in welche Gruppen eingetragen wurden und ob Fehler dabei entstanden sind.
Folgende Punkte prüft das Skript:
– gibt es den Benutzer aus den TXT-Dateien
– gibt es die AD Gruppen
– Ist das AD Powershell Modul vorhanden
– Wurde das AD PowerShell Modul importiert
Wenn es gewünscht ist, dass dieses Skript mehrmals am Tag oder täglich läuft, kann dies über eine geplante Aufgabe realisiert werden. Nachdem die Aufgabe gestartet wurde sollten sich die gewünschten AD Gruppen mit den Benutzern füllen. Wie kann also eine solche Aufgabe erstellt werden?
In meiner Demo-Umgebung habe ich einen neuen Benutzer erstellt, diesem wurden die Domain-Admin Berechtigung gegeben (das ist die einfachste Variante) natürlich kann dies auch mit AD-Delegierung gemacht werden. Ebenfalls muss beachtet werden, dass der Benutzer das Recht auf dem Server hat „Anmelden als Stapelverarbeitungsauftrag“ . Dies kann folgendermaßen geprüft werden „secpol.msc“:
Nun kann eine neue Aufgabe mit dem Benutzer „adgroupimporter“ erstellt werden.
In meinem Fall wird die Aufgabe täglich nach 17 Uhr gestartet.
Ein wichtiger Schritt bei der Ausführung von PowerShell Skripten per Task sind folgende Parameter, welche nicht ganz intuitiv sind.
Start Programm: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Parameters : -ExecutionPolicy Bypass -File “C:\temp\adgroup.ps1”
Beim Erstellen der Aufgabe muss dann noch das Passwort für den Benutzer eingegeben werden. Nach dem Abschluss ist der Task fertig um die Benutzer einmal täglich in die AD Gruppen zu integrieren (nur die Benutzer welche in den TXT-Dateien stehen)
Hat euch der Beitrag gefallen würde ich mich freuen wenn ihr auf „helpful“ klickt. Bei Fragen oder Anregungen lasst mir gerne einen Kommentar dar. Ich versuche diesen schnellstmöglich zu beantworten.