scripts/AD_AIO.ps1 aktualisiert
This commit is contained in:
@@ -706,10 +706,346 @@ function ADGDL {
|
|||||||
$form.Show()
|
$form.Show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Funktion, die beim Klick auf "SMB-Rechte" ausgeführt wird
|
||||||
|
function SMB-RIGHTS {
|
||||||
|
Write-Host "Führe SMB Rechte aus..."
|
||||||
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
|
Import-Module ActiveDirectory
|
||||||
|
|
||||||
|
# Hauptform erstellen
|
||||||
|
$form = New-Object System.Windows.Forms.Form
|
||||||
|
$form.Text = "Verzeichnis- und OU-Auswahl"
|
||||||
|
$form.Size = New-Object System.Drawing.Size(648, 510)
|
||||||
|
|
||||||
|
# RichTextBox für Debug-Informationen hinzufügen
|
||||||
|
$debugTextBox = New-Object System.Windows.Forms.RichTextBox
|
||||||
|
$debugTextBox.Multiline = $true
|
||||||
|
$debugTextBox.Location = New-Object System.Drawing.Point(10, 280)
|
||||||
|
$debugTextBox.Size = New-Object System.Drawing.Size(610, 150)
|
||||||
|
$debugTextBox.ScrollBars = 'Vertical'
|
||||||
|
$debugTextBox.ReadOnly = $true
|
||||||
|
$form.Controls.Add($debugTextBox)
|
||||||
|
|
||||||
|
# Liste für neu angelegte DLs
|
||||||
|
$newDLs = @()
|
||||||
|
|
||||||
|
# TreeView für die Ordnerstruktur (links)
|
||||||
|
$folderTreeView = New-Object System.Windows.Forms.TreeView
|
||||||
|
$folderTreeView.Location = New-Object System.Drawing.Point(10, 10)
|
||||||
|
$folderTreeView.Size = New-Object System.Drawing.Size(300, 200)
|
||||||
|
|
||||||
|
# Setze die folgenden Eigenschaften für den schreibgeschützten Zustand
|
||||||
|
$folderTreeView.LabelEdit = $false # Verhindert das Bearbeiten von Knoten
|
||||||
|
$folderTreeView.AllowDrop = $false # Verhindert Drag & Drop
|
||||||
|
$folderTreeView.HideSelection = $true # Deaktiviert die Auswahlanzeige
|
||||||
|
$folderTreeView.FullRowSelect = $false # Verhindert die vollständige Zeilenmarkierung
|
||||||
|
$folderTreeView.SelectedNode = $null # Setzt die Auswahl zurück
|
||||||
|
$form.Controls.Add($folderTreeView)
|
||||||
|
|
||||||
|
# TextBox für den Hauptordner
|
||||||
|
$folderTextBox = New-Object System.Windows.Forms.TextBox
|
||||||
|
$folderTextBox.Location = New-Object System.Drawing.Point(10, 215)
|
||||||
|
$folderTextBox.Size = New-Object System.Drawing.Size(300, 30)
|
||||||
|
$folderTextBox.ReadOnly = $true
|
||||||
|
$form.Controls.Add($folderTextBox)
|
||||||
|
|
||||||
|
# Button für Ordnerauswahl
|
||||||
|
$folderButton = New-Object System.Windows.Forms.Button
|
||||||
|
$folderButton.Text = "Hauptordner auswählen"
|
||||||
|
$folderButton.Location = New-Object System.Drawing.Point(10, 240)
|
||||||
|
$folderButton.Size = New-Object System.Drawing.Size(300, 30)
|
||||||
|
$form.Controls.Add($folderButton)
|
||||||
|
|
||||||
|
# Ordnerauswahl-Funktion mit FolderBrowserDialog
|
||||||
|
$folderButton.Add_Click({
|
||||||
|
$folderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
|
||||||
|
$folderBrowser.Description = "Wählen Sie den Hauptordner aus, in dem die Unterordner liegen"
|
||||||
|
|
||||||
|
if ($folderBrowser.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
|
||||||
|
# Zeige den ausgewählten Ordner in der TextBox
|
||||||
|
$folderTextBox.Text = $folderBrowser.SelectedPath
|
||||||
|
$debugTextBox.AppendText("Hauptordner ausgewählt: $($folderTextBox.Text)" + [Environment]::NewLine)
|
||||||
|
|
||||||
|
# Leere die TreeView und lade den Ordnerbaum
|
||||||
|
$folderTreeView.Nodes.Clear()
|
||||||
|
|
||||||
|
# Füge die Wurzel des Ordners als Node hinzu
|
||||||
|
$rootNode = New-Object System.Windows.Forms.TreeNode($folderBrowser.SelectedPath)
|
||||||
|
$rootNode.Tag = $folderBrowser.SelectedPath # Pfad im Tag speichern
|
||||||
|
$folderTreeView.Nodes.Add($rootNode)
|
||||||
|
|
||||||
|
# Lade alle Unterordner des ausgewählten Ordners bis zur 2. Ebene (z.B. max. 2 Ebenen)
|
||||||
|
Load-Subfolders $folderBrowser.SelectedPath $rootNode 2 # Maximal 2 Ebenen laden
|
||||||
|
|
||||||
|
# Expandiere den Root-Node
|
||||||
|
$rootNode.Expand()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
# Funktion zum Laden der Unterordner (max. 2 Ebenen)
|
||||||
|
function Load-Subfolders {
|
||||||
|
param (
|
||||||
|
[string]$parentFolder,
|
||||||
|
[System.Windows.Forms.TreeNode]$parentNode,
|
||||||
|
[int]$maxDepth,
|
||||||
|
[int]$currentDepth = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
# Wenn die maximale Tiefe erreicht ist, breche ab
|
||||||
|
if ($currentDepth -ge $maxDepth) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
# Überprüfen, ob der Ordner existiert
|
||||||
|
if (Test-Path $parentFolder) {
|
||||||
|
# Hole alle Unterordner des aktuellen Ordners
|
||||||
|
$subfolders = Get-ChildItem -Path $parentFolder -Directory -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Füge alle Unterordner als Knoten hinzu
|
||||||
|
foreach ($subfolder in $subfolders) {
|
||||||
|
# Erstelle den Knoten für den Unterordner
|
||||||
|
$node = New-Object System.Windows.Forms.TreeNode($subfolder.Name)
|
||||||
|
$node.Tag = $subfolder.FullName # Pfad des Unterordners im Tag speichern
|
||||||
|
$parentNode.Nodes.Add($node)
|
||||||
|
|
||||||
|
# Lade Unterordner rekursiv für diesen Knoten (mit neuer Tiefe)
|
||||||
|
Load-Subfolders $subfolder.FullName $node $maxDepth ($currentDepth + 1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$debugTextBox.AppendText("Pfad nicht gefunden: $parentFolder" + [Environment]::NewLine)
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
$debugTextBox.AppendText("Fehler beim Laden der Ordnerstruktur: $_" + [Environment]::NewLine)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Abschnitt für OU Auswahl
|
||||||
|
|
||||||
|
# ListBox für OUs
|
||||||
|
$ouListBox = New-Object System.Windows.Forms.ListBox
|
||||||
|
$ouListBox.Location = New-Object System.Drawing.Point(320, 10)
|
||||||
|
$ouListBox.Size = New-Object System.Drawing.Size(300, 205)
|
||||||
|
$ouListBox.SelectionMode = [System.Windows.Forms.SelectionMode]::MultiExtended
|
||||||
|
$form.Controls.Add($ouListBox)
|
||||||
|
|
||||||
|
# TextBox für die ausgewählte OU
|
||||||
|
$ouTextBox = New-Object System.Windows.Forms.TextBox
|
||||||
|
$ouTextBox.Location = New-Object System.Drawing.Point(320, 215)
|
||||||
|
$ouTextBox.Size = New-Object System.Drawing.Size(300, 30)
|
||||||
|
$ouTextBox.ReadOnly = $true
|
||||||
|
$form.Controls.Add($ouTextBox)
|
||||||
|
|
||||||
|
# Button für OU-Auswahl
|
||||||
|
$ouButton = New-Object System.Windows.Forms.Button
|
||||||
|
$ouButton.Text = "OU auswählen"
|
||||||
|
$ouButton.Location = New-Object System.Drawing.Point(320, 240)
|
||||||
|
$ouButton.Size = New-Object System.Drawing.Size(300, 30)
|
||||||
|
$form.Controls.Add($ouButton)
|
||||||
|
|
||||||
|
# Event für den Button: Wenn der Button geklickt wird, öffnet sich das Fenster zur OU-Auswahl
|
||||||
|
$ouButton.Add_Click({
|
||||||
|
# Funktion zur OU-Auswahl
|
||||||
|
function Select-OU {
|
||||||
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
|
$ous = Get-ADOrganizationalUnit -Filter *
|
||||||
|
$ouNames = $ous | ForEach-Object { $_.DistinguishedName }
|
||||||
|
|
||||||
|
$ouForm = New-Object System.Windows.Forms.Form
|
||||||
|
$ouForm.Text = "OU auswählen"
|
||||||
|
$ouForm.Size = New-Object System.Drawing.Size(400, 300)
|
||||||
|
|
||||||
|
$listBox = New-Object System.Windows.Forms.ListBox
|
||||||
|
$listBox.Dock = "Fill"
|
||||||
|
$listBox.Items.AddRange($ouNames)
|
||||||
|
$ouForm.Controls.Add($listBox)
|
||||||
|
|
||||||
|
$okButton = New-Object System.Windows.Forms.Button
|
||||||
|
$okButton.Size = New-Object System.Drawing.Size(300, 30)
|
||||||
|
$okButton.Text = "OK"
|
||||||
|
$okButton.Dock = "Bottom"
|
||||||
|
$okButton.Add_Click({
|
||||||
|
if ($listBox.SelectedItem) {
|
||||||
|
$ouForm.DialogResult = [System.Windows.Forms.DialogResult]::OK
|
||||||
|
} else {
|
||||||
|
[System.Windows.Forms.MessageBox]::Show("Bitte wählen Sie eine OU aus.")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
$ouForm.Controls.Add($okButton)
|
||||||
|
|
||||||
|
# Zeige das Auswahlfenster und gebe die ausgewählte OU zurück
|
||||||
|
if ($ouForm.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
|
||||||
|
return $listBox.SelectedItem
|
||||||
|
} else {
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Rufe die Select-OU Funktion auf und speichere die gewählte OU in der TextBox
|
||||||
|
$selectedOU = Select-OU
|
||||||
|
if ($selectedOU) {
|
||||||
|
$ouTextBox.Text = $selectedOU # Setze die ausgewählte OU in die TextBox
|
||||||
|
$debugTextBox.AppendText("Ausgewählte OU: $selectedOU" + [Environment]::NewLine)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
# Funktion zum Laden der OUs in die ListBox
|
||||||
|
function Load-OUs {
|
||||||
|
try {
|
||||||
|
$ous = Get-ADOrganizationalUnit -Filter * | Select-Object -ExpandProperty DistinguishedName
|
||||||
|
$ouListBox.Items.Clear()
|
||||||
|
$ouListBox.Items.AddRange($ous)
|
||||||
|
} catch {
|
||||||
|
$debugTextBox.AppendText("Fehler beim Laden der OUs: $_" + [Environment]::NewLine)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Load-OUs
|
||||||
|
|
||||||
|
# Event für ListBox: Wenn eine OU ausgewählt wird
|
||||||
|
$ouListBox.Add_SelectedIndexChanged({
|
||||||
|
if ($ouListBox.SelectedItem) {
|
||||||
|
$ouTextBox.Text = $ouListBox.SelectedItem
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
# Schließen Button
|
||||||
|
$closeButton = New-Object System.Windows.Forms.Button
|
||||||
|
$closeButton.Text = "Beenden"
|
||||||
|
$closeButton.Location = New-Object System.Drawing.Point(320, 435) # Direkt unterhalb der TextBox
|
||||||
|
$closeButton.Size = New-Object System.Drawing.Size(300, 30)
|
||||||
|
$closeButton.Add_Click({
|
||||||
|
$form.Close()
|
||||||
|
})
|
||||||
|
$form.Controls.Add($closeButton)
|
||||||
|
|
||||||
|
# Starten Button (sichtbar und korrekt positioniert)
|
||||||
|
$startButton = New-Object System.Windows.Forms.Button
|
||||||
|
$startButton.Text = "Starten"
|
||||||
|
$startButton.Location = New-Object System.Drawing.Point(10, 435) # Direkt unterhalb des TextBox
|
||||||
|
$startButton.Size = New-Object System.Drawing.Size(300, 30)
|
||||||
|
$startButton.Add_Click({
|
||||||
|
$mainFolderPath = $folderTextBox.Text
|
||||||
|
$ouPath = $ouTextBox.Text
|
||||||
|
|
||||||
|
if (-not $mainFolderPath) {
|
||||||
|
# Fehlernachricht (schwarz)
|
||||||
|
Add-DebugMessage -message "Bitte wählen Sie einen gültigen Ordner aus." -isPositive $false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not $ouPath) {
|
||||||
|
# Fehlernachricht (schwarz)
|
||||||
|
Add-DebugMessage -message "Bitte wählen Sie eine gültige OU aus." -isPositive $false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# Berechtigungen definieren
|
||||||
|
$permissions = @{
|
||||||
|
"RO" = [System.Security.AccessControl.FileSystemRights]::Read
|
||||||
|
"RX" = [System.Security.AccessControl.FileSystemRights]::ReadAndExecute
|
||||||
|
"RW" = [System.Security.AccessControl.FileSystemRights]::Modify
|
||||||
|
"FA" = [System.Security.AccessControl.FileSystemRights]::FullControl
|
||||||
|
}
|
||||||
|
|
||||||
|
# Liste für neu angelegte DLs und Rechte
|
||||||
|
$newDLs = @()
|
||||||
|
$newRights = @()
|
||||||
|
|
||||||
|
# Unterordner im Hauptordner durchlaufen
|
||||||
|
$subfolders = Get-ChildItem -Path $mainFolderPath -Directory
|
||||||
|
foreach ($subfolder in $subfolders) {
|
||||||
|
$subfolderName = $subfolder.Name.Trim()
|
||||||
|
$subfolderNameClean = $subfolderName -replace ' ', '_'
|
||||||
|
|
||||||
|
foreach ($permissionName in $permissions.Keys) {
|
||||||
|
$dlGroupName = "DL_${subfolderNameClean}_${permissionName}"
|
||||||
|
|
||||||
|
# DL-Gruppe erstellen, wenn nicht vorhanden
|
||||||
|
$dlGroup = Get-ADGroup -Filter {Name -eq $dlGroupName}
|
||||||
|
if (-not $dlGroup) {
|
||||||
|
try {
|
||||||
|
New-ADGroup -Name $dlGroupName -GroupScope DomainLocal -Path $ouPath
|
||||||
|
$newDLs += $dlGroupName # Hinzufügen des DL-Namens zur Liste
|
||||||
|
# Erfolgsnachricht (grün)
|
||||||
|
Add-DebugMessage -message "Erstellt: $dlGroupName" -isPositive $true
|
||||||
|
} catch {
|
||||||
|
# Fehlernachricht (schwarz)
|
||||||
|
Add-DebugMessage -message "Fehler bei der Erstellung der Gruppe '$dlGroupName': $_" -isPositive $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Berechtigungen auf Ordner setzen
|
||||||
|
try {
|
||||||
|
$acl = Get-Acl -Path $subfolder.FullName
|
||||||
|
$permission = $permissions[$permissionName]
|
||||||
|
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule (
|
||||||
|
$dlGroupName,
|
||||||
|
$permission,
|
||||||
|
"ContainerInherit,ObjectInherit",
|
||||||
|
"None",
|
||||||
|
"Allow"
|
||||||
|
)
|
||||||
|
$acl.SetAccessRule($accessRule)
|
||||||
|
Set-Acl -Path $subfolder.FullName -AclObject $acl
|
||||||
|
# Füge die Berechtigungen zur Liste hinzu
|
||||||
|
$newRights += "Recht '$permissionName' auf $($subfolder.FullName) für $dlGroupName gesetzt"
|
||||||
|
# Erfolgsnachricht (grün)
|
||||||
|
Add-DebugMessage -message "Berechtigung '$permissionName' auf $($subfolder.FullName) für $dlGroupName gesetzt." -isPositive $true
|
||||||
|
} catch {
|
||||||
|
# Fehlernachricht (schwarz)
|
||||||
|
Add-DebugMessage -message "Fehler beim Setzen der Berechtigung auf $($subfolder.FullName) für '$dlGroupName': $_" -isPositive $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Zeige die neu angelegten DLs im Debug-Fenster (grün)
|
||||||
|
Add-DebugMessage -message "Folgende DLs wurden erfolgreich angelegt:" -isPositive $true
|
||||||
|
Add-DebugMessage -message ($newDLs -join [Environment]::NewLine) -isPositive $true
|
||||||
|
|
||||||
|
# Zeige die neu vergebenen Rechte im Debug-Fenster (grün)
|
||||||
|
Add-DebugMessage -message "Folgende Rechte wurden erfolgreich vergeben:" -isPositive $true
|
||||||
|
Add-DebugMessage -message ($newRights -join [Environment]::NewLine) -isPositive $true
|
||||||
|
|
||||||
|
# Trennstrich
|
||||||
|
$separator = '+' * 90 # Zeichen '+' wiederholen
|
||||||
|
Add-DebugMessage -message $separator -isSeparator $true
|
||||||
|
})
|
||||||
|
|
||||||
|
$form.Controls.Add($startButton)
|
||||||
|
|
||||||
|
# Funktion zum Hinzufügen von Text in die Debug-TextBox mit Farben
|
||||||
|
function Add-DebugMessage {
|
||||||
|
param (
|
||||||
|
[string]$message,
|
||||||
|
[bool]$isPositive,
|
||||||
|
[bool]$isSeparator = $false # Standardwert für isSeparator auf false setzen
|
||||||
|
)
|
||||||
|
|
||||||
|
if ($isSeparator) {
|
||||||
|
# Setze die Textfarbe auf Schwarz für den Separator
|
||||||
|
$debugTextBox.SelectionColor = 'Black'
|
||||||
|
} elseif ($isPositive) {
|
||||||
|
# Setze die Textfarbe auf Grün für positive Nachrichten
|
||||||
|
$debugTextBox.SelectionColor = 'Green'
|
||||||
|
} else {
|
||||||
|
# Setze die Textfarbe auf Rot für negative Nachrichten
|
||||||
|
$debugTextBox.SelectionColor = 'Red'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Füge die Nachricht zum Textfeld hinzu
|
||||||
|
$debugTextBox.AppendText($message + [Environment]::NewLine)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Formular anzeigen
|
||||||
|
$form.Show()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Erstellen des Formulars
|
# Erstellen des Formulars
|
||||||
$form = New-Object Windows.Forms.Form
|
$form = New-Object Windows.Forms.Form
|
||||||
$form.Text = 'Administrator Tools'
|
$form.Text = 'Administrator Tools'
|
||||||
$form.Size = New-Object Drawing.Size(300, 200)
|
$form.Size = New-Object Drawing.Size(300, 250)
|
||||||
|
|
||||||
# Erstellen des Buttons für "Create User"
|
# Erstellen des Buttons für "Create User"
|
||||||
$btnCreateUser = New-Object Windows.Forms.Button
|
$btnCreateUser = New-Object Windows.Forms.Button
|
||||||
@@ -732,10 +1068,18 @@ $btnADGDL.Size = New-Object Drawing.Size(250, 40)
|
|||||||
$btnADGDL.Location = New-Object Drawing.Point(20, 110)
|
$btnADGDL.Location = New-Object Drawing.Point(20, 110)
|
||||||
$btnADGDL.Add_Click({ ADGDL })
|
$btnADGDL.Add_Click({ ADGDL })
|
||||||
|
|
||||||
|
# Erstellen des Buttons für "SMB-RIGHTS"
|
||||||
|
$btnSMBRIGHTS = New-Object Windows.Forms.Button
|
||||||
|
$btnSMBRIGHTS.Text = 'SMB-RIGHTS'
|
||||||
|
$btnSMBRIGHTS.Size = New-Object Drawing.Size(250, 40)
|
||||||
|
$btnSMBRIGHTS.Location = New-Object Drawing.Point(20, 160)
|
||||||
|
$btnSMBRIGHTS.Add_Click({ SMB-RIGHTS })
|
||||||
|
|
||||||
# Hinzufügen der Buttons zum Formular
|
# Hinzufügen der Buttons zum Formular
|
||||||
$form.Controls.Add($btnCreateUser)
|
$form.Controls.Add($btnCreateUser)
|
||||||
$form.Controls.Add($btnCreateGroups)
|
$form.Controls.Add($btnCreateGroups)
|
||||||
$form.Controls.Add($btnADGDL)
|
$form.Controls.Add($btnADGDL)
|
||||||
|
$form.Controls.Add($btnSMBRIGHTS)
|
||||||
|
|
||||||
# Anzeigen des Formulars
|
# Anzeigen des Formulars
|
||||||
$form.ShowDialog()
|
$form.ShowDialog()
|
||||||
Reference in New Issue
Block a user