Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Microsoft Windows Server

Mitglied: kilrathi

kilrathi (Level 1) - Jetzt verbinden

09.01.2015 um 11:51 Uhr, 2021 Aufrufe, 5 Kommentare, 2 Danke

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
Mitglied: colinardo
09.01.2015, aktualisiert um 12:10 Uhr
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
Bitte warten ..
Mitglied: kilrathi
09.01.2015 um 13:46 Uhr
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
Bitte warten ..
Mitglied: colinardo
09.01.2015, aktualisiert um 14:37 Uhr
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.
Bitte warten ..
Mitglied: kilrathi
12.01.2015 um 10:49 Uhr
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.
Bitte warten ..
Mitglied: kilrathi
13.01.2015, aktualisiert um 09:37 Uhr
Hab das Script mal angepasst. Ich denke zwar das sich bei euch immer noch die Nackenhaare hochstellen werden, aber was solls

#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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen (1)

Frage von windelterrorist zum Thema Batch & Shell ...

Batch & Shell
gelöst AD-Felder für User mittels Powershell befüllen aus CSV-Datei (2)

Frage von Alex94G zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell: Spalten tauschen und neue Spalten in CSV datei erzeugen (16)

Frage von Rippchen zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (24)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...