# Änderungsziel vs. 2: Return in Main realisieren durch einbau von EventHandler # Ist nicht auf Stand von 2!!!!! 2 Aktuell besser! # https://techwizard.cloud/2014/03/11/powershell-custom-gui-input-box-for-passing-values-to-variables/ # Todo: Alles Function Main { #Ändern. Laufwerke sollten möglichst in der GUI initialisert werden $Laufwerke = LaufwerkeFinden [System.String]$Pfad = Gui $Laufwerke Write-Host "Dateityp nach Übergabe: " $Pfad.GetType() Write-Host "Datei ausgewählt mit dem Verzeichnis " $Pfad } Function Gui ($Laufwerke) { [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") # Eigenschaften Fenster $Fenster = New-Object System.Windows.Forms.Form $Fenster.Text = "Laufwerke" $Fenster.Size = New-Object System.Drawing.Size(900,600) #Breite, Höhe $Fenster.StartPosition = "CenterScreen" $Fenster.KeyPreview = $true # was macht das? $Fenster.MaximumSize = $Fenster.Size # legt fest, dass Größe des Fensters nicht verändert werden kann $Fenster.MinimumSize = $Fenster.Size # PfadFeld $PfadFeld = New-Object System.Windows.Forms.TextBox $PfadFeld.Location = New-Object System.Drawing.Size(10,10) $PfadFeld.Size = New-Object System.Drawing.Size(860,20) #$PfadFeld.Text = $Pfad #Bringt nur etwas, wenn $Pfad einen Anfangswert hat, da der Text nicht laufend aktualisiert wird $Fenster.Controls.Add($PfadFeld) # ListeOrdnernamen $ListeOrdnernamen = New-Object System.Windows.Forms.ListBox $ListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40) $ListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20) $ListeOrdnernamen.Height = 450 foreach ($Laufwerk in $Laufwerke) { $ListeOrdnernamen.Items.Add($Laufwerk) } <#for ($i = 0; $i -lt 100; $i++) { $ListeOrdnernamen.Items.Add("Wert$i") }#> $Fenster.Controls.Add($ListeOrdnernamen) <# # Beispiel Textfeld $Textfeld1 = New-Object System.Windows.Forms.Label $Textfeld1.Location = New-Object System.Drawing.Size(7,500) $Textfeld1.Size = New-Object System.Drawing.Size(130,15) $Textfeld1.Text = "Beispiel Text" $Fenster.Controls.Add($Textfeld1) #> # AuswählenButton $AuswählenButton = New-Object System.Windows.Forms.Button $AuswählenButton.Location = New-Object System.Drawing.Size(750,500) $AuswählenButton.Size = New-Object System.Drawing.Size(100,30) $AuswählenButton.Text = "Auswählen" $AuswählenButton.Add_MouseClick({ # Aktion bei Klick # Variablen bestimmen zur Übergabe $Auswahl = $ListeOrdnernamen.SelectedItem $Pfad = $PfadFeld.Text Write-Host "Gewählter Ordner/ Datei: " $Auswahl Write-Host "Vorheriger Pfad: " $Pfad # Pfad aktualisieren VerzeichnisAktualisieren $Pfad $Auswahl }) $Fenster.Controls.Add($AuswählenButton) # ZurückButton $ZurückButton = New-Object System.Windows.Forms.Button $ZurückButton.Location = New-Object System.Drawing.Size(10,500) $ZurückButton.Size = New-Object System.Drawing.Size(100,30) $ZurückButton.Text = "Zurück" $ZurückButton.Add_MouseClick({ Write-Host "Pfad ausgabe: " $PfadFeld.Text $Pfad = $PfadFeld.Text if ($Pfad.Length -gt 3) { # Weiter mit Ordnern/Dateien Write-Host "Ordner/ Dateien anzeigen" $Pfad = Split-Path $Pfad Write-Host "Neuer Pfad: " $Pfad $PfadFeld.Text = $Pfad $Fenster.Text = $(Split-Path $Pfad) $ListeOrdnernamen.Items.Clear() Write-Host "Pfadwert vor Übergabe: " $Pfad $Optionen = Optionen $Pfad foreach ($Option in $Optionen) { # Write-Host "Option: " $Option if ($Option.length -gt 0) { $ListeOrdnernamen.Items.Add($Option) } } } elseif ($Pfad.Length -le 3) { # Weiter mit Laufwerken Write-Host "Laufwerke anzeigen" $Pfad = Split-Path $Pfad Write-Host "Neuer Pfad: " $Pfad $PfadFeld.Text = $Pfad $Fenster.Text = "Laufwerke" $ListeOrdnernamen.Items.Clear() Write-Host "Pfadwert vor Übergabe: " $Pfad $Laufwerke = LaufwerkeFinden $Pfad foreach ($Laufwerk in $Laufwerke) { # Write-Host "Option: " $Option if ($Laufwerk.length -gt 0) { $ListeOrdnernamen.Items.Add($Laufwerk) } } } else { # Fehler/ Nichts tun? } }) $Fenster.Controls.Add($ZurückButton) $Fenster.Add_Shown({$Fenster.Activate()}) [void]$Fenster.ShowDialog() $eventHandler = [System.EventHandler]{ $PfadFeld.Text $ListeOrdnernamen.SelectedItem $Fenster.Close() } # TestButton $TestButton = New-Object System.Windows.Forms.Button $TestButton.Location = New-Object System.Drawing.Size(355,500) $TestButton.Size = New-Object System.Drawing.Size(100,30) $TestButton.Text = "Test" $TestButton.Add_Click($eventHandler) $Fenster.Controls.Add($TestButton) Write-Host "Ausgabe vor Ende Gui-Funktion, Pfad: " $Pfad return $Pfad } Function VerzeichnisAktualisieren ($Pfad, $Auswahl) { if ($Pfad.length -gt 0) { $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve } else { $Pfad = $Auswahl } #Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen if ($($Auswahl -match ".txt")) { Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad Write-Host "Dateityp: " $Pfad.GetType() $Fenster.Dispose() #NachAuswahl $Pfad return $Pfad } # Werte in Form aktualisieren $PfadFeld.Text = $Pfad $Fenster.Text = $Auswahl $ListeOrdnernamen.Items.Clear() $Optionen = Optionen $Pfad Write-Host "Mögliche Optionen: " $Optionen foreach ($Option in $Optionen) { # Write-Host "Option: " $Option if ($Option.length -gt 0) { $ListeOrdnernamen.Items.Add($Option) } } Write-Host "Neuer Pfad: " $Pfad return } Function NachAuswahl ($Pfad) { Write-Host "Auswahl abgeschlossen, ab jetzt .txt-Datei bearbeiten" Write-Host "Name in Funktion: " $Pfad Exit } Function UnterOrdnerFinden($Pfad) { #abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung $Ordner = $(Get-Childitem $Pfad -Directory) return $Ordner } Function LaufwerkeFinden() { $Laufwerke = $(Get-PSDrive | where {$_.Free}).Name $i = 0 foreach($Laufwerk in $Laufwerke) { $Laufwerke[$i] = $Laufwerk + ":\" $i++ } return $Laufwerke } Function TxtDateienFinden($Pfad) { $TxtDateien = $(Get-Childitem $Pfad\*.txt) if ($TxtDateien.Length -gt 0) { return $(Split-Path $TxtDateien -Leaf) } else { return } } Function Optionen($Pfad) { # Unterordner und .txt-Dateien finden $UnterOrdner = UnterOrdnerFinden $Pfad $TxtDateien = TxtDateienFinden $Pfad #Write-Host "Gefundenen Unterordner: " $Unterorder #Write-Host "Gefundenen TxtDateien: " $TxtDateien #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück $Optionen = $UnterOrdner + $TxtDateien #Write-Host "Optionen vor Übergabe: " $Optionen return $Optionen } Main