# Änderungsziel vs. 1: Funktion bei Klick auf "Auswählen" und "Zurück" auslagern # Knwon problem: Zugriffsversuch auf einen Ordner, für den der Nutzer keine Freigabe hat. Aktuell kein Lösungsansatz bekannt. # Todo: siehe Zettel! Function Main { Write-Host "Programmstart" $StartPfad = "" $PfadUrsprungsdatei = GuiTxtWaehlen $StartPfad Write-Host "Pfad Ursprungsdatei: " $PfadUrsprungsdatei # Testen, ob übergebener Pfad gültig ist? Könnte ungültig sein, wenn in PfadFeld unsinn steht und das Fenster via x geschlossen wird $PfadUrsprungsdateiMod = Split-Path $PfadUrsprungsdatei $PfadZielDateien = GuiVerzeichnisWaehlen $PfadUrsprungsdateiMod Write-Host "Dateirückgabe in Main(2): " $PfadZielDateien $PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien $PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien #Write-Host "Dateiname EA: " $PfadDateiEA #Write-Host "Dateiname DIDQ: " $PfadDateiDIDQ ExcelDateiErstellen $PfadDateiEA ExcelDateiErstellen $PfadDateiDIDQ $AlleGleichenEA = ExcelDateiBeschreiben $PfadUrsprungsdatei "E" "A" $PfadDateiEA $AlleGleichenDIDQ = ExcelDateiBeschreiben $PfadUrsprungsdatei "DI" "DQ" $PfadDateiDIDQ Write-Host "Gleiche EA nach Rückgabe: " $AlleGleichenEA $GleicheEingaenge = $AlleGleichenEA[0] $GleicheAusgaenge = $AlleGleichenEA[1] Write-Host "Gleiche Eingänge: " $GleicheEingaenge Write-Host "Gleiche Ausgänge: " $GleicheAusgaenge #Todo: Nur öffnen, wenn es weder gleiche Eingänge, noch gleiche Ausgänge gibt? GuiGleicheAnzeigen $GleicheEingaenge $GleicheAusgaenge } Function GuiTxtWaehlen ($StartPfad) { [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") # Eigenschaften Fenster $Fenster = New-Object System.Windows.Forms.Form $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.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TXTTastenReaktionPfadFeld $Taste }) $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 $ListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular) $ListeOrdnernamen.Add_DoubleClick({ # Variablen bestimmen zur Übergabe $Auswahl = $ListeOrdnernamen.SelectedItem $Pfad = $PfadFeld.Text # Write-Host "Gewählter Ordner/ Datei: " $Auswahl # Write-Host "Vorheriger Pfad: " $Pfad # Pfad aktualisieren TXTVerzeichnisAuswaehlen $Pfad $Auswahl }) $ListeOrdnernamen.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TXTTastenReaktionListeOrdnernamen $Taste }) $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) #> # 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_Click({ # Write-Host "Pfad ausgabe: " $PfadFeld.Text $Pfad = $PfadFeld.Text #Pfad aktualisieren TXTVerzeichnisZurueck $Pfad }) $ZurückButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TXTTastenReaktionButtons $Taste }) $Fenster.Controls.Add($ZurückButton) # 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_Click({ # Variablen bestimmen zur Übergabe $Auswahl = $ListeOrdnernamen.SelectedItem # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren if ($($Auswahl.length -eq 0)) { $Auswahl = $ListeOrdnernamen.Items[0] } $Pfad = $PfadFeld.Text # Write-Host "Gewählter Ordner/ Datei: " $Auswahl # Write-Host "Vorheriger Pfad: " $Pfad # Pfad aktualisieren TXTVerzeichnisAuswaehlen $Pfad $Auswahl }) $AuswählenButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TXTTastenReaktionButtons $Taste }) $Fenster.Controls.Add($AuswählenButton) # Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird $A = TXTAnzeigeAktualisieren $StartPfad $Fenster.Add_Shown({$Fenster.Activate()}) [void]$Fenster.ShowDialog() $Rueckgabe = $PfadFeld.Text Write-Host "Rückgabe: " $Rueckgabe return $Rueckgabe } #--------------------------------------------------------- E N D E G U I txtWaehlen ---------------------------------------------------------------------- #------------------- Funktionen nur für das txt-GUI -------------------------- # Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles # Für Laufwerke muss $Pfad = "" sein Function TXTAnzeigeAktualisieren ($Pfad) { # Write-Host "Übergebener Pfad: " $Pfad # Sicherstellen, dass es das Verzeichnis gibt if ($($Pfad -eq "") -or $(PfadExistiert $Pfad)) { # Feststellen, ob Ordner oder Laufwerke angezeigt werden müssen if ($Pfad.Length -ne "") { # Es handelt sich um Ordner $Optionen = TXTOptionen $Pfad $Fenster.Text = $(Split-Path $Pfad -Leaf) } elseif ($Pfad.Length -eq "") { # Es handelt sich um Laufwerke $Optionen = LaufwerkeFinden $Pfad = "" $Fenster.Text = "Laufwerke" } else { Write-Host "Fehler bei Anzeige aktualisieren" # Fehler(?) } $PfadFeld.Text = $Pfad $ListeOrdnernamen.Items.Clear() foreach ($Option in $Optionen) { if ($Option.Length -gt 0) { $ListeOrdnernamen.Items.Add($Option) } } } else { TXTAnzeigeAktualisieren "" } return } Function TXTVerzeichnisAuswaehlen ($Pfad, $Auswahl) { if ($Pfad.length -gt 0) { $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve } else { $Pfad = $Auswahl } #Falls nicht aktiv ein Eintrag ausgewählt wurde, den obersten wählen if ($Auswahl.length -eq 0) { $Auswahl = $ListeOrdnernamen.Items[0] } # 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() # Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht $PfadFeld.Text = $Pfad return } TXTAnzeigeAktualisieren $Pfad return } Function TXTVerzeichnisZurueck ($Pfad) { if ($Pfad.Length -gt 3) { # Weiter mit Ordnern # Write-Host "Ordner anzeigen" $Pfad = Split-Path $Pfad } elseif ($Pfad.Length -le 3) { # Weiter mit Laufwerken # Write-Host "Laufwerke anzeigen" $Pfad = "" } else { Write-Host "Fehler bei Verzeichnis zurück" # Fehler/ Nichts tun? # Ermitteln: wann tritt dieser Fall ein? } TXTAnzeigeAktualisieren $Pfad return } Function TXTTastenReaktionPfadFeld($Taste) { # Write-Host "Übergebene Taste: " $Taste switch ($Taste){ "Return" { # Write-Host "Enter gedrückt" $Pfad = $PfadFeld.Text # Write-Host "Pfad: " $Pfad TXTReaktionReturn $Pfad } default { # Write-Host "Gedrückte Taste: " $Taste } } return } Function TXTTastenReaktionListeOrdnernamen($Taste) { # Write-Host "Übergebene Taste: " $Taste switch ($Taste){ "Return" { # Write-Host "Enter gedrückt" $Auswahl = $ListeOrdnernamen.SelectedItem if ($($Auswahl.Length -eq 0)) { $Auswahl = $ListeOrdnernamen.Items[0] } $Pfad = $PfadFeld.Text # Write-Host "Auswahl: " $Auswahl # Write-Host "Pfad: " $Pfad TXTVerzeichnisAuswaehlen $Pfad $Auswahl } "Back" { # Write-Host "Back gedrückt" $Pfad = $PfadFeld.Text # Write-Host "Pfad: " $Pfad # Pfad aktualisieren TXTVerzeichnisZurueck $Pfad } default { # Write-Host "Gedrückte Taste: " $Taste } } return } Function TXTTastenReaktionButtons($Taste) { # Write-Host "Übergebene Taste: " $Taste switch ($Taste){ "Back" { # Write-Host "Back gedrückt" $Pfad = $PfadFeld.Text # Write-Host "Pfad: " $Pfad # Pfad aktualisieren TXTVerzeichnisZurueck $Pfad } default { # Write-Host "Gedrückte Taste: " $Taste } } return } Function TXTOptionen($Pfad) { # Unterordner und .txt-Dateien finden # Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner eines Ordners, der mit "_" beginnt, nicht gefunden werden können [System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad $TxtDateien = TxtDateienFinden $Pfad #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück $Optionen = $UnterOrdner + $TxtDateien return $Optionen } Function TXTReaktionReturn ($Pfad) { if (PfadExistiert $Pfad) { # Gültiger Pfad oder .txt-Datei $PfadEnde = $(Split-Path $Pfad -Leaf) if ($($PfadEnde -match ".txt")) { $Fenster.Dispose() # Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht richtig $PfadFeld.Text = $Pfad return } else { TXTAnzeigeAktualisieren $Pfad } } else { # Laufwerke aktualisieren oder ungültiger Pfad TXTAnzeigeAktualisieren "" } return } Function GuiVerzeichnisWaehlen ($StartPfad) { [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") # Eigenschaften Fenster $Fenster = New-Object System.Windows.Forms.Form $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.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode VERTastenReaktionPfadFeld $Taste }) $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 $ListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular) $ListeOrdnernamen.Add_DoubleClick({ # Variablen bestimmen zur Übergabe $Auswahl = $ListeOrdnernamen.SelectedItem $Pfad = $PfadFeld.Text # Write-Host "Gewählter Ordner/ Datei: " $Auswahl # Write-Host "Vorheriger Pfad: " $Pfad # Pfad aktualisieren VERVerzeichnisAuswaehlen $Pfad $Auswahl }) $ListeOrdnernamen.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode VERTastenReaktionListeOrdnernamen $Taste }) $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) #> # 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_Click({ # Write-Host "Pfad ausgabe: " $PfadFeld.Text $Pfad = $PfadFeld.Text #Pfad aktualisieren VERVerzeichnisZurueck $Pfad }) $ZurückButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode VERTastenReaktionButtons $Taste }) $Fenster.Controls.Add($ZurückButton) # AuswählenButton $AuswählenButton = New-Object System.Windows.Forms.Button $AuswählenButton.Location = New-Object System.Drawing.Size(630,500) $AuswählenButton.Size = New-Object System.Drawing.Size(100,30) $AuswählenButton.Text = "Auswählen" $AuswählenButton.Add_Click({ # Variablen bestimmen zur Übergabe $Auswahl = $ListeOrdnernamen.SelectedItem # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren if ($($Auswahl.length -eq 0)) { $Auswahl = $ListeOrdnernamen.Items[0] } $Pfad = $PfadFeld.Text # Write-Host "Gewählter Ordner/ Datei: " $Auswahl # Write-Host "Vorheriger Pfad: " $Pfad if ($($ListeOrdnernamen.Items[0] -eq "")) { VERAuswahlBestaetigt $Pfad $Auswahl } else { # Pfad aktualisieren VERVerzeichnisAuswaehlen $Pfad $Auswahl } }) $AuswählenButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode VERTastenReaktionButtons $Taste }) $Fenster.Controls.Add($AuswählenButton) # BestätigenButton $BestätigenButton = New-Object System.Windows.Forms.Button $BestätigenButton.Location = New-Object System.Drawing.Size(750,500) $BestätigenButton.Size = New-Object System.Drawing.Size(100,30) $BestätigenButton.Text = "Bestätigen" $BestätigenButton.Add_Click({ $Auswahl = $ListeOrdnernamen.SelectedItem # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren if ($($Auswahl.length -eq 0)) { $Auswahl = $ListeOrdnernamen.Items[0] } $Pfad = $PfadFeld.Text VERAuswahlBestaetigt $Pfad $Auswahl }) $BestätigenButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode VERTastenReaktionButtons $Taste }) $Fenster.Controls.Add($BestätigenButton) # Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird $A = VERAnzeigeAktualisieren $StartPfad $Fenster.Add_Shown({$Fenster.Activate()}) [void]$Fenster.ShowDialog() $Rueckgabe2 = $PfadFeld.Text Write-Host "Rückgabe: " $Rueckgabe2 return $Rueckgabe2 } #--------------------------------------------------------- E N D E G U I VerzeichnsWaehlen ---------------------------------------------------------------------- #------------------- Funktionen nur für das VerzeichnisWaehlen-GUI -------------------------- # Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles # Für Laufwerke muss $Pfad = "" sein Function VERAnzeigeAktualisieren ($Pfad) { # Write-Host "Übergebener Pfad: " $Pfad # Sicherstellen, dass es das Verzeichnis gibt if ($($Pfad -eq "") -or $(PfadExistiert $Pfad)) { # Feststellen, ob Ordner oder Laufwerke angezeigt werden müssen if ($Pfad.Length -ne "") { # Es handelt sich um Ordner $Optionen = VEROptionen $Pfad $Fenster.Text = $(Split-Path $Pfad -Leaf) } elseif ($Pfad.Length -eq "") { # Es handelt sich um Laufwerke $Optionen = LaufwerkeFinden $Pfad = "" $Fenster.Text = "Laufwerke" } else { Write-Host "Fehler bei Anzeige aktualisieren" # Fehler(?) } $PfadFeld.Text = $Pfad $ListeOrdnernamen.Items.Clear() foreach ($Option in $Optionen) { if ($Option.Length -gt 0) { $ListeOrdnernamen.Items.Add($Option) } } } else { VERAnzeigeAktualisieren "" } return } Function VERVerzeichnisAuswaehlen ($Pfad, $Auswahl) { #Falls nicht aktiv ein Eintrag ausgewählt wurde, den obersten wählen if ($Auswahl.length -eq 0) { $Auswahl = $ListeOrdnernamen.Items[0] } if ($Pfad.length -gt 0) { $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve } else { $Pfad = $Auswahl } VERAnzeigeAktualisieren $Pfad return } Function VERVerzeichnisZurueck ($Pfad) { if ($Pfad.Length -gt 3) { # Weiter mit Ordnern # Write-Host "Ordner anzeigen" $Pfad = Split-Path $Pfad } elseif ($Pfad.Length -le 3) { # Weiter mit Laufwerken # Write-Host "Laufwerke anzeigen" $Pfad = "" } else { Write-Host "Fehler bei Verzeichnis zurück" # Fehler/ Nichts tun? # Ermitteln: wann tritt dieser Fall ein? } VERAnzeigeAktualisieren $Pfad return } Function VERTastenReaktionPfadFeld($Taste) { # Write-Host "Übergebene Taste: " $Taste switch ($Taste){ "Return" { # Write-Host "Enter gedrückt" $Pfad = $PfadFeld.Text # Write-Host "Pfad: " $Pfad # Es muss nicht überprüft werden, ob es das Verzeichnis gibt, da dies auch in VERAnzeigeAktualisieren gemacht wird VERAnzeigeAktualisieren $Pfad } "ShiftKey" { $Pfad = $PfadFeld.Text $Auswahl = $ListeOrdnernamen.SelectedItem # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren if ($($Auswahl.length -eq 0)) { $Auswahl = $ListeOrdnernamen.Items[0] } ReaktionShiftKey $Pfad $Auswahl } default { # Write-Host "Gedrückte Taste: " $Taste } } return } Function VERTastenReaktionListeOrdnernamen($Taste) { # Write-Host "Übergebene Taste: " $Taste switch ($Taste){ "Return" { # Write-Host "Enter gedrückt" $Auswahl = $ListeOrdnernamen.SelectedItem if ($($Auswahl.Length -eq 0)) { $Auswahl = $ListeOrdnernamen.Items[0] } $Pfad = $PfadFeld.Text # Write-Host "Auswahl: " $Auswahl # Write-Host "Pfad: " $Pfad VERVerzeichnisAuswaehlen $Pfad $Auswahl } "Back" { # Write-Host "Back gedrückt" $Pfad = $PfadFeld.Text # Write-Host "Pfad: " $Pfad # Pfad aktualisieren VERVerzeichnisZurueck $Pfad } "ShiftKey" { $Pfad = $PfadFeld.Text $Auswahl = $ListeOrdnernamen.SelectedItem # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren if ($($Auswahl.length -eq 0)) { $Auswahl = $ListeOrdnernamen.Items[0] } ReaktionShiftKey $Pfad $Auswahl } default { # Write-Host "Gedrückte Taste: " $Taste } } return } Function VERTastenReaktionButtons($Taste) { # Write-Host "Übergebene Taste: " $Taste switch ($Taste){ "Back" { # Write-Host "Back gedrückt" $Pfad = $PfadFeld.Text # Write-Host "Pfad: " $Pfad # Pfad aktualisieren VERVerzeichnisZurueck $Pfad } "ShiftKey" { $Pfad = $PfadFeld.Text $Auswahl = $ListeOrdnernamen.SelectedItem # Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren if ($($Auswahl.length -eq 0)) { $Auswahl = $ListeOrdnernamen.Items[0] } ReaktionShiftKey $Pfad $Auswahl } default { # Write-Host "Gedrückte Taste: " $Taste } } return } Function VEROptionen($Pfad) { # Unterordner und .txt-Dateien finden # Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner eines Ordners, der mit "_" beginnt, nicht gefunden werden können [System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad # $TxtDateien = TxtDateienFinden $Pfad #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück $Optionen = $UnterOrdner return $Optionen } Function VERAuswahlBestaetigt($Pfad, $Auswahl) { $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve if (PfadExistiert $Pfad) { Write-Host "Pfad zur Rückgabe: " $Pfad $Fenster.Dispose() $Pfadfeld.Text = $Pfad return } } Function GuiGleicheAnzeigen ($GleicheEingaenge, $GleicheAusgaenge) { [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") # Eigenschaften Fenster $Fenster = New-Object System.Windows.Forms.Form $Fenster.Size = New-Object System.Drawing.Size(905,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 $Fenster.Text = "Mehrfach vorhandene Ein- und Ausgänge" $Textfeld1 = New-Object System.Windows.Forms.Label $Textfeld1.Location = New-Object System.Drawing.Size(10,10) $Textfeld1.Size = New-Object System.Drawing.Size(430,20) $Textfeld1.Text = "Bei den Eingängen gibt es folgende Duplikate: " $Fenster.Controls.Add($Textfeld1) $ListeEingänge = New-Object System.Windows.Forms.DataGridView $ListeEingänge.Location = New-Object System.Drawing.Size(10,40) $ListeEingänge.Size = New-Object System.Drawing.Size(430,20) $ListeEingänge.Height = 450 $ListeEingänge.ColumnCount = 2 $ListeEingänge.ColumnHeadersVisible = $true $ListeEingänge.Columns[0].Name = "Zeile" $ListeEingänge.Columns[1].Name = "Kennzeichnung" foreach ($GleichenEingang in $GleicheEingaenge) { Write-Host "Hinzufügen TabelleE: " $GleichenEingang $ListeEingänge.Rows.Add($($GleichenEingang.Zeile),($GleichenEingang.Name)) } $Fenster.Controls.Add($ListeEingänge) $Textfeld2 = New-Object System.Windows.Forms.Label $Textfeld2.Location = New-Object System.Drawing.Size(450,10) $Textfeld2.Size = New-Object System.Drawing.Size(430,20) $Textfeld2.Text = "Bei den Ausgängen gibt es folgende Duplikate: " $Fenster.Controls.Add($Textfeld2) $ListeAusgänge = New-Object System.Windows.Forms.DataGridView $ListeAusgänge.Location = New-Object System.Drawing.Size(450,40) $ListeAusgänge.Size = New-Object System.Drawing.Size(430,20) $ListeAusgänge.Height = 450 $ListeAusgänge.ColumnCount = 2 $ListeAusgänge.ColumnHeadersVisible = $true $ListeAusgänge.Columns[0].Name = "Zeile" $ListeAusgänge.Columns[1].Name = "Kennzeichnung" foreach ($GleichenAusgang in $GleicheAusgaenge) { Write-Host "Hinzufügen TabelleA: " $GleichenAusgang $ListeAusgänge.Rows.Add($($GleichenAusgang.Zeile),($GleichenAusgang.Name)) } $Fenster.Controls.Add($ListeAusgänge) $BestätigenButton = New-Object System.Windows.Forms.Button $BestätigenButton.Location = New-Object System.Drawing.Size(10,500) $BestätigenButton.Size = New-Object System.Drawing.Size(860,30) $BestätigenButton.Text = "Programm beenden" $BestätigenButton.Add_Click({ $Fenster.Dispose() return }) $Fenster.Controls.Add($BestätigenButton) $Fenster.Add_Shown({$Fenster.Activate()}) [void]$Fenster.ShowDialog() } #------------------- Funktionen für alle GUIs -------------------------- Function PfadExistiert ($Pfad) { if ($(Test-Path $Pfad -PathType Container) -or $(Test-Path $Pfad -Include "*.txt")) { # Write-Host "Bei dem Verzeichnis handelt es sich um eine *.txt-Datei oder ein gültiges Verzeichnis" return $true } else { # Write-Host "Das Verzeichnis existiert nicht oder es wurde keine *.txt-Datei gewählt" return $false } } Function LaufwerkeFinden() { $Laufwerke = $(Get-PSDrive | Where-Object {$_.Free}).Name $i = 0 foreach($Laufwerk in $Laufwerke) { $Laufwerke[$i] = $Laufwerk + ":\" $i++ } return $Laufwerke } Function UnterOrdnerFinden($Pfad) { # Write-Host "Ordner zum suchen von Unterordnern: " $Pfad $UnterOrdner = $(Get-ChildItem $Pfad -Directory) # Write-Host "Gefundene Unterordner: " $UnterOrdner if ($($UnterOrdner.Length -gt 0)) { $Ordner = $(Split-Path $UnterOrdner -Leaf) } else { $Ordner = "" } # Write-Host "Gefundene Ordner: " $Ordner return $Ordner } Function TxtDateienFinden($Pfad) { $TxtDateien = $(Get-Childitem $Pfad\*.txt) if ($TxtDateien.Length -gt 0) { return $(Split-Path $TxtDateien -Leaf) } else { return } } Function ReaktionShiftKey ($Pfad, $Auswahl) { if (PfadExistiert $Pfad) { VERAuswahlBestaetigt $Pfad $Auswahl } else { VERAnzeigeAktualisieren "" } return } #--------------------------------------- Ende Funktionen für GUI ------------------------------- Function ExcelDateiNameErstellen ($Prefix, $PfadUrsprungsdatei, $PfadZielDateien) { $BasisNameZielDatei = Split-Path $PfadUrsprungsdatei -Leaf $BasisNameZielDateiLaenge = $BasisNameZielDatei.Length $BasisNameZielDateiKurz = $BasisNameZielDatei.Substring(0, $($BasisNameZielDateiLaenge - 4)) $GesamtPfadZielDatei = $PfadZielDateien + "\" + $Prefix + "_" + $BasisNameZielDateiKurz + ".xlsx" return $GesamtPfadZielDatei } Function ExcelDateiErstellen ($DateiPfad) { $Datei = New-Object -ComObject Excel.Application $Mappe = $Datei.Workbooks.Add() $Mappe.SaveAs($DateiPfad) $Datei.Quit() return } Function ExcelDateiBeschreiben ($PfadUrsprungsdatei, $Umwandler1, $Umwandler2, $ZielDatei) { $Datei = New-Object -ComObject Excel.Application $Mappe = $Datei.Workbooks.Open($ZielDatei) $Blatt = $Mappe.WorkSheets.item(1) $Datei.Visible = $false $i = 1 $Wandler1 = @() $ZuWandler1 = @(„DI“, „BA“, „BB“, „BC“, „BD“, „BE“, „BF“, „BG“, „BH“, „BJ“, „BK“, „BL“, „BM“, „BN“, „BP“, „BQ“, „BR“, „BS“, „BT“, „BU“, „BV“, „BW“, „BX“, „BY“, „BZ“, „FA“, „FB“, „FC“, „FD“, „FE“, „FF“, „FG“, „FH“, „FJ“, „FK“, „FL“, „FM“, „FN“, „FP“, „FQ“, „FR“, „FS“, „FT“, „FU“, „FV“, „FW“, „FX“, „FY“, „FZ“, „SA“, „SB“, „SC“, „SD“, „SE“, „SF“, „SG“, „SH“, „SJ“, „SK“, „SL“, „SM“, „SN“, „SP“, „SQ“, „SR“, „SS“, „ST“, „SU“, „SV“, „SW“, „SX“, „SY“, „SZ“) $Wandler2 = @() $ZuWandler2 = @(„DQ“, „CA“, „CB“, „CC“, „CD“, „CE“, „CF“, „CG“, „CH“, „CJ“, „CK“, „CL“, „CM“, „CN“, „CP“, „CQ“, „CR“, „CS“, „CT“, „CU“, „CV“, „CW“, „CX“, „CY“, „CZ“, „EA“, „EB“, „EC“, „ED“, „EE“, „EF“, „EG“, „EH“, „EJ“, „EK“, „EL“, „EM“, „EN“, „EP“, „EQ“, „ER“, „ES“, „ET“, „EU“, „EV“, „EW“, „EX“, „EY“, „EZ“, „GA“, „GB“, „GC“, „GD“, „GE“, „GF“, „GG“, „GH“, „GJ“, „GK“, „GL“, „GM“, „GN“, „GP“, „GQ“, „GR“, „GS“, „GT“, „GU“, „GV“, „GW“, „GX“, „GY“, „GZ“, „HA“, „HB“, „HC“, „HD“, „HE“, „HF“, „HG“, „HH“, „HJ“, „HK“, „HL“, „HM“, „HN“, „HP“, „HQ“, „HR“, „HS“, „HT“, „HU“, „HV“, „HW“, „HX“, „HY“, „HZ“, „KA“, „KB“, „KC“, „KD“, „KE“, „KF“, „KG“, „KH“, „KJ“, „KK“, „KL“, „KM“, „KN“, „KP“, „KQ“, „KR“, „KS“, „KT“, „KU“, „KV“, „KW“, „KX“, „KY“, „KZ“, „MA“, „MB“, „MC“, „MD“, „ME“, „MF“, „MG“, „MH“, „MJ“, „MK“, „ML“, „MM“, „MN“, „MP“, „MQ“, „MR“, „MQ“, „MR“, „MS“, „MT“, „MU“, „MV“, „MW“, „MX“, „MY“, „MZ“, „PA“, „PB“, „PC“, „PD“, „PE“, „PF“, „PG“, „PH“, „PJ“, „PK“, „PL“, „PM“, „PN“, „PP“, „PQ“, „PR“, „PS“, „PT“, „PU“, „PV“, „PW“, „PX“, „PY“, „PZ“, „QA“, „QB“, „QC“, „QD“, „QE“, „QF“, „QG“, „QH“, „QJ“, „QK“, „QL“, „QM“, „QN“, „QP“, „QQ“, „QR“, „QS“, „QT“, „QU“, „QV“, „QW“, „QX“, „QY“, „QZ“, „RA“, „RB“, „RC“, „RD“, „RE“, „RF“, „RG“, „RH“, „RJ“, „RK“, „RL“, „RM“, „RN“, „RP“, „RQ“, „RR“, „RS“, „RT“, „RU“, „RV“, „RW“, „RX“, „RY“, „RZ“, „TA“, „TB“, „TC“, „TD“, „TE“, „TF“, „TG“, „TH“, „TJ“, „TK“, „TL“, „TM“, „TN“, „TP“, „TQ“, „TR“, „TS“, „TT“, „TU“, „TV“, „TW“, „TX“, „TY“, „TZ“) $Fehler = @() $Ursprungdatei = Get-Content $PfadUrsprungsdatei foreach ($Eintrag in $Ursprungdatei) { $Eintragszeile = $Eintrag.Split("'") $BMKZahl = $Eintragszeile[1] $BMKZahl = $BMKZahl.TrimStart("'") $Kommentar = $Eintragszeile[3] $Kommentar = $Kommentar.TrimEnd("'") if ($($($BMKZahl.Substring(0,2)) -in $ZuWandler1)) { $BMKZahl = $BMKZahl -replace("[a-zA-Z]","") $BMKZahlLaenge = $($BMKZahl.Length - 1) $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) $BMKZahl = $Umwandler1 + $BMKZahl $Wandler1 += @([PSCustomObject]@{ Name = $BMKZahl Zeile = $i }) } elseif ($($($BMKZahl.Substring(0,2)) -in $ZuWandler2)) { $BMKZahl = $BMKZahl -replace("[a-zA-Z]","") $BMKZahlLaenge = $($BMKZahl.Length - 1) $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) $BMKZahl = $Umwandler2 + $BMKZahl $Wandler2 += @([PSCustomObject]@{ Name = $BMKZahl Zeile = $i }) } else { Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar $Fehler += @([PSCustomObject]@{ Name = $BMKZahl Zeile = $i }) } Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar $Blatt.Cells.Item($i,1) = $BMKZahl $Blatt.Cells.Item($i,2) = $Kommentar $i++ } $Mappe.Save() $Datei.Quit() $GleicheWandler1 = GleicheFinden $Wandler1 $GleicheWandler2 = GleicheFinden $Wandler2 Write-Host "Gleiche für " $Umwandler1 ": " $GleicheWandler1 Write-Host "Gleiche für " $Umwandler2 ": " $GleicheWandler2 return $GleicheWandler1, $GleicheWandler2 } Function GleicheFinden ($ZuUeberpruefen) { $ZuUeberpruefen = $ZuUeberpruefen | Sort-Object "Name" $Gleiche = @() for ($i = 0; $i -lt $($ZuUeberpruefen.Count - 1); $i++) { $IstGleich = $($ZuUeberpruefen[$i].Name -eq $ZuUeberpruefen[$($i+1)].Name) if ($IstGleich) { # Eintrag hinzufügen if (-not $($Gleiche[-1].Zeile -eq $ZuUeberpruefen[$i].Zeile)) { $Gleiche += $ZuUeberpruefen[$i] } $Gleiche += $ZuUeberpruefen[$($i+1)] #Write-Host "Gleiche: " $Gleiche } } if ( $($Gleiche.Length -eq 0)) { $Gleiche += @([PSCustomObject]@{ Name = "Keine" Zeile = "Alle" }) } return $Gleiche } Main