kilrathi
Goto Top

Erstellen von Verzeichnissen, Gruppen und Berechtigungen über Powershell und CSV-Datei

Hallo Leute,

ich habe eine Frage und hoffe Ihr könnt mir dabei schnell und einfach helfen:
In meinem ersten Projekt für meinen neuen Arbeitgeber habe ich eine für mich doch etwas zu knifflige Aufgabe erhalten.

Es geht dabei um ne Fileservermigration und einen Neuaufbau der Ordnerstruktur.
Dabei wird eine Excel Datei zur Verfügung gestellt die folgendermaßen aufgebaut ist.

Spalte 1 ; Spalte 2 ; Spalte 3
Standort ; Ordner ; Unterordner

Bsp: Berlin ; Dokumentation ; Installationsanleitungen

Aus dieser Excel Datei wird dann ne CSV-Datei erstellt, die für den weiteren Verlauf verwendet werden soll.
Im ersten Schritt sollen die entsprechenden Ordner und Unterordner erstellt werden über ein Script
Im zweiten Schritt sollen für jede Ebene Gruppen erstellt werden. Diese Gruppen haben allerdings unterschiedliche Name und Berechtigungen

Bsp:
Ebene 1: "Standort"_"Fileserver"_"R" (Read)
Ebene 2: "Standort"_"Fileserver"_"Ordner"_"R" und "Standort"_"Fileserver"_"Ordner"_"M" (Manage)
Ebene 3: "Standort"_"Fileserver"_"Ordner"_"Unterordner"_"R" und "Standort"_"Fileserver"_"Ordner"_"Unterordner"_"C" (Change)

Die Ebene 3 Gruppen werden Mitglied der entsprechenden Ebene 2 Read Gruppe (Rückwärts Verschachtelung).
Die Ebene 2 Gruppe (M) soll in den Ebene 3 Gruppen ein Managementrecht bekommen.
Ansonsten sollen die Gruppen nur auf ihrer Ebene die jeweiligen Berechtigungen erhalten.

Die Verzeichnisse und Gruppen konnte ich bereits über 2 getrennte Skripte erstellen lassen. Ich glaube das wäre aber auch in nur einem Skript möglich (soll es auch sein)
Nur mit dem erstellen und vergeben von Berechtigungen habe ich so meine Probleme.


Vielleicht könnt Ihr mir ja helfen. Ich soll am Mittwoch Ergebnisse vorlegen können....

Danke im Voraus
Viele Grüße
Kilrathi

Content-Key: 259325

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

Printed on: April 18, 2024 at 03:04 o'clock

Member: colinardo
colinardo Jan 09, 2015 updated at 11:10:13 (UTC)
Goto Top
Hallo Kilrathi, WIllkommen auf Administrator.de!
Guckst du hier für das Vergeben von Berechtigungen:

Für die Unterbrechung der Vererbung siehe:
Unterbrechen der Vererbung mit SetAcessRuleProtection

Grüße Uwe
Member: kilrathi
kilrathi Jan 09, 2015 at 12:46:26 (UTC)
Goto Top
Hallo Uwe,

vielen Dank für die schnelle Antwort.
Ich glaube mein Hauptproblem (neben meiner geringen Kenntnisse im Umgang mit Powershell) ist die Tatsache, dass im Script alles automatisiert ablaufen soll für mehrere hundert Ordner und Gruppen.

So muss ja z.B. für das Verzeichnis: Berlin - Dokumentation - Installation einerseits die Gruppe Berlin_FS_R erstellt werden, die dann nur im Verzeichnis Berlin auftaucht. Die Gruppen Berlin_FS_Doku_R und Berlin_FS_Doku_M, die dann nur im Verzeichnis Doku auftauchen usw.

Ist mein geplantes Vorgehen überhaupt realisierbar? Also kann man mit Hilfe der CSV Datei bzw. mit Hilfe der erstellten Gruppen / Verzeichnisse diese diversen Abfragen und Abläufe starten? Ich stell mir das gerade alleine für eine Ebene schon ziemlich verzwickt vor. Bei 2 oder 3 Ebenen steigt mein Hirn aber dann komplett aus.

Ich poste jetzt anbei mal mein Script zum erstellen der Gruppen. (In welchem übrigens diverse Fehler angezeigt werden, dass die Gruppen schon existieren, aber dennoch alles so funktioniert wie ich mir das vorstelle:

$fs = "FILESERVER"

$ordner = Import-Csv \\$fs\c$\users\administrator\desktop\Level1-3.csv

foreach ($i in $ordner){
New-ADGroup -name ($i.Level1 + "_" + $fs + "_R") -DisplayName ($i.Level1 + "_" + $fs + "_R") -GroupCategory Security -GroupScope Global -Path "OU=Level 1,OU=Gruppen (Test), DC=def,DC=local" -EA 0
}
foreach ($j in $ordner){
New-ADGroup -name ($j.Level1 + "_" + $fs + "_" + $j.Level2 + "_R") -DisplayName ($j.Level1 + "_" + $fs + "_" + $j.Level2 + "_R") -GroupCategory Security -GroupScope Global -Path "OU=Level 2,OU=Gruppen (Test), DC=def,DC=local" -EA 0
New-ADGroup -name ($j.Level1 + "_" + $fs + "_" + $j.Level2 + "_M") -DisplayName ($j.Level1 + "_" + $fs + "_" + $j.Level2 + "_M") -GroupCategory Security -GroupScope Global -Path "OU=Level 2,OU=Gruppen (Test), DC=def,DC=local" -EA 0
}
foreach ($k in $ordner){
New-ADGroup -name ($k.Level1 + "_" + $fs + "_" + $k.Level2 + "_" + $k.Level3 + "_R") -DisplayName ($k.Level1 + "_" + $fs + "_" + $k.Level2 + "_" + $k.Level3 + "_R") -GroupCategory Security -GroupScope Global -Path "OU=Level 3,OU=Gruppen (Test), DC=def,DC=local" -EA 0
New-ADGroup -name ($k.Level1 + "_" + $fs + "_" + $k.Level2 + "_" + $k.Level3 + "_C") -DisplayName ($k.Level1 + "_" + $fs + "_" + $k.Level2 + "_" + $k.Level3 + "_C") -GroupCategory Security -GroupScope Global -Path "OU=Level 3,OU=Gruppen (Test), DC=def,DC=local" -EA 0
}

Sieht auch etwas chaotisch und unübersichtlich aus, aber es erfüllt soweit den Zweck.

VG Kilrathi
Member: colinardo
colinardo Jan 09, 2015 updated at 13:37:52 (UTC)
Goto Top
neben meiner geringen Kenntnisse im Umgang mit Powershell) ist die Tatsache, dass im Script alles automatisiert ablaufen soll für mehrere hundert Ordner und Gruppen.
Schön und gut und alles machbar, aber bist du dir sicher das das Projekt etwas für dich ist?
Ich möchte natürlich nicht das wenn das hier eine Bewährungsprobe in deinem Job sein soll das deinem Arbeitgeber falsche Tatsachen vorgetäuscht werden.
Wenn Powershell nicht dein Steckenpferd ist, würde ich das erst mal dem Arbeitgeber gegenüber erwähnen und um mehr Einarbeitungszeit, oder eine Schulung bitten.

Die mehrfachen Schleifen über alle Ordner ist schon mal eine suboptimale Herangehensweise.
Du musst die Schritte am besten Zeile für Zeile abarbeiten inkl. Ordnererstellung, Anlage der Gruppen und Vergabe der Berechtigungen. Also alles in einer großen Schleife über die Zeilen der CSV machbar.

Mache dir evt. am Wochenende mal eine grobe Skizze, wie sowas aussieht.
Member: kilrathi
kilrathi Jan 12, 2015 at 09:49:34 (UTC)
Goto Top
Danke, dass du dir da Gedanken machst. Kann dich da aber beruhigen.
Ich werde nicht auf Dauer im Bereich der Powershell eingesetzt werden, aber hier und da müssen eben Scripte etc. geschrieben werden.
Deshalb bekommen wir (Arbeitskollegen und ich) auch demnächst die ein oder andere Schulung im Bereich Powershell.
Aktuell geht es einfach darum das "Problem" zu lösen.

Ich dachte mir schon, dass die aktuelle Variante eher suboptimal ist. Aber auch deswegen hab ich mich an dich / euch gewandt in der Hoffnung auf Hilfe und Unterstützung. Ich versuch mich auch im Laufe des Tages an der Verbesserung der Scripte und bin gespannt, wie dein Lösungsvorschlag aussieht.

Viele Grüße und danke nochmal.
Member: kilrathi
kilrathi Jan 13, 2015 updated at 08:37:15 (UTC)
Goto Top
Hab das Script mal angepasst. Ich denke zwar das sich bei euch immer noch die Nackenhaare hochstellen werden, aber was solls face-smile

#Basis Variablen
$fs = "DEF-SVR1"
$ou1 = "OU=Level 1,OU=Gruppen (Test)"
$ou2 = "OU=Level 2,OU=Gruppen (Test)"
$ou3 = "OU=Level 3,OU=Gruppen (Test)"
$dc = "DC=def, DC=local"
$ordner = Import-Csv \\$fs\c$\users\administrator\desktop\Level1-3.csv

foreach ($i in $ordner){
#Spezifische Variablen
$lvl1 = ($i.Level1 + "_" + $fs + "_R")
$lvl2a = ($i.Level1 + "_" + $fs + "_" + $i.Level2 + "_R")
$lvl2b = ($i.Level1 + "_" + $fs + "_" + $i.Level2 + "_M")
$lvl3a = ($i.Level1 + "_" + $fs + "_" + $i.Level2 + "_" + $i.Level3 + "_R")
$lvl3b = ($i.Level1 + "_" + $fs + "_" + $i.Level2 + "_" + $i.Level3 + "_C")

#Verzeichnisse erstellen
New-Item -type directory -path ("\\" + $fs + "\d$\" + $i.Level1 + "\" + $i.Level2 + "\" + $i.Level3) -EA 0

#AD Gruppen erstellen
if ((Get-ADGroup -Filter {Name -eq $lvl1}) -eq $null) {
New-ADGroup -name ($i.Level1 + "_" + $fs + "_R") -GroupCategory Security -GroupScope Global -Path "$ou1, $dc" }

if (((Get-ADGroup -Filter {Name -eq $lvl2a}) -eq $null) -and ((Get-ADGroup -Filter {Name -eq $lvl2b})) -eq $null) {
New-ADGroup -name ($i.Level1 + "_" + $fs + "_" + $i.Level2 + "_R") -GroupCategory Security -GroupScope Global -Path "$ou2, $dc"
New-ADGroup -name ($i.Level1 + "_" + $fs + "_" + $i.Level2 + "_M") -GroupCategory Security -GroupScope Global -Path "$ou2, $dc" }

if (((Get-ADGroup -Filter {Name -eq $lvl3a}) -eq $null) -and ((Get-ADGroup -Filter {Name -eq $lvl3b})) -eq $null) {
New-ADGroup -name ($i.Level1 + "_" + $fs + "_" + $i.Level2 + "_" + $i.Level3 + "_R") -GroupCategory Security -GroupScope Global -Path "$ou3, $dc"
New-ADGroup -name ($i.Level1 + "_" + $fs + "_" + $i.Level2 + "_" + $i.Level3 + "_C") -GroupCategory Security -GroupScope Global -Path "$ou3, $dc" }
}

Hab jetzt Abfragen drin, die überprüfen ob die jeweilige Gruppe vorhanden ist und wenn nicht, dann wird sie erstellt.

Als Nächstes muss ich heute irgendwie noch das Thema Berechtigungen in den Griff bekommen. Wäre schön, wenn ihr mir da helfen könntet. Danke..

VIele Grüße
Michael