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-ID: 259325

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

Ausgedruckt am: 24.11.2024 um 21:11 Uhr

colinardo
colinardo 09.01.2015 aktualisiert um 12:10:13 Uhr
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
kilrathi
kilrathi 09.01.2015 um 13:46:26 Uhr
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
colinardo
colinardo 09.01.2015 aktualisiert um 14:37:52 Uhr
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.
kilrathi
kilrathi 12.01.2015 um 10:49:34 Uhr
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.
kilrathi
kilrathi 13.01.2015 aktualisiert um 09:37:15 Uhr
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