Add-Type -AssemblyName System.Windows.Forms Import-Module ActiveDirectory # 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 } # Hauptform erstellen $form = New-Object System.Windows.Forms.Form $form.Text = "Verzeichnis- und OU-Auswahl" $form.Size = New-Object System.Drawing.Size(648, 600) # RichTextBox für Debug-Informationen hinzufügen (Breite verkleinert auf 600px) $debugTextBox = New-Object System.Windows.Forms.RichTextBox $debugTextBox.Multiline = $true $debugTextBox.Location = New-Object System.Drawing.Point(10, 380) $debugTextBox.Size = New-Object System.Drawing.Size(610, 150) # Breite angepasst auf 600px $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, 300) # Höhe und Breite angepasst auf 300px $form.Controls.Add($folderTreeView) # TextBox für den Hauptordner (zeigt den Pfad des ausgewählten Ordners) $folderTextBox = New-Object System.Windows.Forms.TextBox $folderTextBox.Location = New-Object System.Drawing.Point(10, 315) $folderTextBox.Size = New-Object System.Drawing.Size(300, 30) # Gleiche Breite wie die TreeView $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, 340) $folderButton.Size = New-Object System.Drawing.Size(300, 30) # Gleiche Breite wie die TextBox $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 nur die ersten Unterordner (maximal eine Ebene tief) Load-Subfolders $folderBrowser.SelectedPath $rootNode # Expandiere den Root-Node $rootNode.Expand() } }) # Funktion zum Laden der Unterordner in die TreeView (maximal 1 Ebene tief) function Load-Subfolders { param ( [string]$parentFolder, [System.Windows.Forms.TreeNode]$parentNode ) 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 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) # Prüfe, ob dieser Ordner Unterordner hat (für den "+" Indikator) $hasSubfolders = (Get-ChildItem -Path $subfolder.FullName -Directory -ErrorAction SilentlyContinue).Count -gt 0 if ($hasSubfolders) { # Wenn Unterordner vorhanden sind, den Knoten expandierbar machen (zeige +) $node.Nodes.Add([System.Windows.Forms.TreeNode]::new("Dummy")) # Platzhalter hinzufügen } } # Expandiere den Node, wenn Unterordner vorhanden sind if ($parentNode.Nodes.Count -gt 0) { $parentNode.Expand() } } 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 (Höhe angepasst auf 300px) $ouListBox = New-Object System.Windows.Forms.ListBox $ouListBox.Location = New-Object System.Drawing.Point(320, 10) # Etwas rechts vom TreeView $ouListBox.Size = New-Object System.Drawing.Size(300, 305) # Gleiche Höhe wie die TreeView $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, 315) $ouTextBox.Size = New-Object System.Drawing.Size(300, 30) # Gleiche Breite wie ListBox $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, 340) $ouButton.Size = New-Object System.Drawing.Size(300, 30) # Gleiche Breite wie TextBox $form.Controls.Add($ouButton) # Funktion zum Laden der OUs in die ListBox direkt beim Start function Load-OUs { try { # Alle OUs abrufen und in die ListBox einfügen $ous = Get-ADOrganizationalUnit -Filter * | Select-Object -ExpandProperty DistinguishedName $ouListBox.Items.Clear() $ouListBox.Items.AddRange($ous) $debugTextBox.AppendText("OUs wurden geladen." + [Environment]::NewLine) } catch { $debugTextBox.AppendText("Fehler beim Laden der OUs: $_" + [Environment]::NewLine) } } # OUs laden, wenn das Formular geladen wird Load-OUs # Event für ListBox: Wenn eine OU ausgewählt wird $ouListBox.Add_SelectedIndexChanged({ if ($ouListBox.SelectedItem) { $ouTextBox.Text = $ouListBox.SelectedItem $debugTextBox.AppendText("Ausgewählte OU: $($ouTextBox.Text)" + [Environment]::NewLine) } }) # Starten Button $startButton = New-Object System.Windows.Forms.Button $startButton.Text = "Starten" $startButton.Location = New-Object System.Drawing.Point(10, 640) $startButton.Size = New-Object System.Drawing.Size(150, 30) $startButton.Add_Click({ $mainFolderPath = $folderTextBox.Text $ouPath = $ouTextBox.Text if (-not $mainFolderPath) { $debugTextBox.AppendText("Kein Hauptordner ausgewählt." + [Environment]::NewLine) } else { $debugTextBox.AppendText("Hauptordner: $mainFolderPath, OU: $ouPath" + [Environment]::NewLine) # Weiterer Code für die Verarbeitung des Ordners und der OU } }) # Formular anzeigen $form.ShowDialog()