Function Main { Write-Host "Programmstart" $ZielDateien = EinstellungsDateiVorhanden Write-Host "Zieldateien in Main: " $ZielDateien $StartPfad = StartPfadHolen GUI $StartPfad $ZielDateien } Function GUI ($StartPfad, $ZielDateien) { [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(940,660) #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 = "Dateikonvertierer txt zu xlsx" # Eigenschaften Tabs $TabBasis = New-Object System.Windows.Forms.TabControl $TabBasis.Location = New-Object System.Drawing.Size(10,10) $TabBasis.Size = New-Object System.Drawing.Size(900,600) $TabBasis.DataBindings.DefaultDataSourceUpdateMode = 0 # Was macht das? $Fenster.Controls.Add($TabBasis) # Tab: TXT-Pfad auswaehlen $TabSeiteTXTAuswaehlen = New-Object System.Windows.Forms.TabPage $TabSeiteTXTAuswaehlen.TabIndex = 0 $TabSeiteTXTAuswaehlen.UseVisualStyleBackColor = $true $TabSeiteTXTAuswaehlen.Text = "txt-Datei Auswaehlen" #Paddings $TabSeiteTXTAuswaehlen.DataBindings.DefaultDataSourceUpdateMode = 0 $TabBasis.Controls.Add($TabSeiteTXTAuswaehlen) # TXTPfadFeld $TXTPfadFeld = New-Object System.Windows.Forms.TextBox $TXTPfadFeld.Location = New-Object System.Drawing.Size(10,10) $TXTPfadFeld.Size = New-Object System.Drawing.Size(860,20) $TXTPfadFeld.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionPfadFeld "txt" $Taste }) $TabSeiteTXTAuswaehlen.Controls.Add($TXTPfadFeld) # TXTListeOrdnernamen $TXTListeOrdnernamen = New-Object System.Windows.Forms.ListBox $TXTListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40) $TXTListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20) $TXTListeOrdnernamen.Height = 450 $TXTListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular) $TXTListeOrdnernamen.Add_DoubleClick({ # Variablen bestimmen zur Übergabe $Auswahl = $TXTListeOrdnernamen.SelectedItem $Pfad = $TXTPfadFeld.Text # Write-Host "Gewählter Ordner/ Datei: " $Auswahl # Write-Host "Vorheriger Pfad: " $TXTPfad # Pfad aktualisieren VerzeichnisAuswaehlen "txt" $Pfad $Auswahl }) $TXTListeOrdnernamen.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionListeOrdnernamen "txt" $Taste }) $TabSeiteTXTAuswaehlen.Controls.Add($TXTListeOrdnernamen) # ZurückButton $TXTZurueckButton = New-Object System.Windows.Forms.Button $TXTZurueckButton.Location = New-Object System.Drawing.Size(10,500) $TXTZurueckButton.Size = New-Object System.Drawing.Size(100,30) $TXTZurueckButton.Text = "Zurueck" $TXTZurueckButton.Add_Click({ # Write-Host "Pfad ausgabe: " $TXTPfadFeld.Text $Pfad = $TXTPfadFeld.Text #Pfad aktualisieren VerzeichnisZurueck "txt" $Pfad }) $TXTZurueckButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionButtons "txt" $Taste }) $TabSeiteTXTAuswaehlen.Controls.Add($TXTZurueckButton) # AuswaehlenButton $TXTAuswaehlenButton = New-Object System.Windows.Forms.Button $TXTAuswaehlenButton.Location = New-Object System.Drawing.Size(750,500) $TXTAuswaehlenButton.Size = New-Object System.Drawing.Size(100,30) $TXTAuswaehlenButton.Text = "Auswaehlen" $TXTAuswaehlenButton.Add_Click({ # Variablen bestimmen zur Übergabe $Auswahl = $TXTListeOrdnernamen.SelectedItem $Pfad= $TXTPfadFeld.Text # Write-Host "Gewählter Ordner/ Datei: " $Auswahl # Write-Host "Vorheriger Pfad: " $TXTPfad # Pfad aktualisieren VerzeichnisAuswaehlen "txt" $Pfad $Auswahl }) $TXTAuswaehlenButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionButtons "txt" $Taste }) $TabSeiteTXTAuswaehlen.Controls.Add($TXTAuswaehlenButton) $A = AnzeigeAktualisieren "txt" $StartPfad # Ohne dem Aufruf kann kein Startverzeichnis übergeben werden. Wird der Aufruf keiner Variable zugewiesen verursacht dies Fehler bei der Rückgabe. #$TXTDatei = $TXTPfadFeld.Text # Tab: Zielverzeichnis auswaehlen $TabSeiteZielVerzeichnisAuswaehlen = New-Object System.Windows.Forms.TabPage $TabSeiteZielVerzeichnisAuswaehlen.TabIndex = 1 $TabSeiteZielVerzeichnisAuswaehlen.UseVisualStyleBackColor = $true $TabSeiteZielVerzeichnisAuswaehlen.Text = "Zielverzeichnis Auswaehlen" #Paddings $TabSeiteZielVerzeichnisAuswaehlen.DataBindings.DefaultDataSourceUpdateMode = 0 $TabBasis.Controls.Add($TabSeiteZielVerzeichnisAuswaehlen) # PfadFeld $VERPfadFeld = New-Object System.Windows.Forms.TextBox $VERPfadFeld.Location = New-Object System.Drawing.Size(10,10) $VERPfadFeld.Size = New-Object System.Drawing.Size(860,20) $VERPfadFeld.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionPfadFeld "ver" $Taste }) $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERPfadFeld) # ListeOrdnernamen $VERListeOrdnernamen = New-Object System.Windows.Forms.ListBox $VERListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40) $VERListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20) $VERListeOrdnernamen.Height = 450 $VERListeOrdnernamen.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular) $VERListeOrdnernamen.Add_DoubleClick({ # Variablen bestimmen zur Übergabe $Auswahl = $VERListeOrdnernamen.SelectedItem $Pfad = $VERPfadFeld.Text # Write-Host "Gewählter Ordner/ Datei: " $Auswahl # Write-Host "Vorheriger Pfad: " $VERPfad # Pfad aktualisieren VerzeichnisAuswaehlen "ver" $Pfad $Auswahl }) $VERListeOrdnernamen.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionListeOrdnernamen "ver" $Taste }) $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERListeOrdnernamen) # ZurückButton $VERZurueckButton = New-Object System.Windows.Forms.Button $VERZurueckButton.Location = New-Object System.Drawing.Size(10,500) $VERZurueckButton.Size = New-Object System.Drawing.Size(100,30) $VERZurueckButton.Text = "Zurueck" $VERZurueckButton.Add_Click({ # Write-Host "Pfad ausgabe: " $VERPfadFeld.Text $Pfad = $VERPfadFeld.Text #Pfad aktualisieren VerzeichnisZurueck "ver" $Pfad }) $VERZurueckButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionButtons "ver" $Taste }) $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERZurueckButton) # AuswaehlenButton $VERAuswaehlenButton = New-Object System.Windows.Forms.Button $VERAuswaehlenButton.Location = New-Object System.Drawing.Size(630,500) $VERAuswaehlenButton.Size = New-Object System.Drawing.Size(100,30) $VERAuswaehlenButton.Text = "Auswaehlen" $VERAuswaehlenButton.Add_Click({ # Variablen bestimmen zur Übergabe $Auswahl = $VERListeOrdnernamen.SelectedItem $Pfad = $VERPfadFeld.Text # Write-Host "Gewählter Ordner/ Datei: " $Auswahl # Write-Host "Vorheriger Pfad: " $VERPfad if ($($VERListeOrdnernamen.Items[0] -eq "")) { VERAuswahlBestaetigt $Pfad $Auswahl } else { # Pfad aktualisieren VerzeichnisAuswaehlen "ver" $Pfad $Auswahl } }) $VERAuswaehlenButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionButtons "ver" $Taste }) $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERAuswaehlenButton) # BestaetigenButton $VERBestaetigenButton = New-Object System.Windows.Forms.Button $VERBestaetigenButton.Location = New-Object System.Drawing.Size(750,500) $VERBestaetigenButton.Size = New-Object System.Drawing.Size(100,30) $VERBestaetigenButton.Text = "Bestaetigen" $VERBestaetigenButton.Add_Click({ $Auswahl = $VERListeOrdnernamen.SelectedItem $Pfad = $VERPfadFeld.Text VERAuswahlBestaetigt $Pfad $Auswahl }) $VERBestaetigenButton.Add_KeyDown({ # Reaktion bei gedrückter Taste $Taste = $_.KeyCode TastenReaktionButtons "ver" $Taste }) $TabSeiteZielVerzeichnisAuswaehlen.Controls.Add($VERBestaetigenButton) # Dieser Funktionsaufruf zerstört die Rückgabe, wenn er keiner Variable zugewiesen wird #$A = AnzeigeAktualisieren "ver" $TXTPfadFeld.Text #$ZielVerzeichnis = $VERPfadFeld.Text # Tab: Ausgabe Fortschritt $TabSeiteFortschrittsanzeige = New-Object System.Windows.Forms.TabPage $TabSeiteFortschrittsanzeige.TabIndex = 2 $TabSeiteFortschrittsanzeige.UseVisualStyleBackColor = $true $TabSeiteFortschrittsanzeige.Text = "Bearbeitungsfortschritt" #Paddings $TabSeiteFortschrittsanzeige.DataBindings.DefaultDataSourceUpdateMode = 0 $TabBasis.Controls.Add($TabSeiteFortschrittsanzeige) $FATextfeld1 = New-Object System.Windows.Forms.Label $FATextfeld1.Location = New-Object System.Drawing.Size(10,10) $FATextfeld1.Size = New-Object System.Drawing.Size(200,20) $FATextfeld1.Text = "Aktuelle Aufgabe" $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld1) $FATextfeld2 = New-Object System.Windows.Forms.Label $FATextfeld2.Location = New-Object System.Drawing.Size(300,10) $FATextfeld2.Size = New-Object System.Drawing.Size(430,20) $FATextfeld2.Text = "Erledigte Aufgaben" $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld2) $FATextfeldAktuelleAufgabe = New-Object System.Windows.Forms.Label $FATextfeldAktuelleAufgabe.Location = New-Object System.Drawing.Size(10,40) $FATextfeldAktuelleAufgabe.Size = New-Object System.Drawing.Size(280,60) $FATextfeldAktuelleAufgabe.Text = "txt-Datei auswaehlen" $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldAktuelleAufgabe) $FAListeErledigteAufgaben = New-Object System.Windows.Forms.ListBox $FAListeErledigteAufgaben.Location = New-Object System.Drawing.Size(300,40) $FAListeErledigteAufgaben.Size = New-Object System.Drawing.Size(430,20) $FAListeErledigteAufgaben.Height = 150 $FAListeErledigteAufgaben.Font = New-Object System.Drawing.Font("Arial",12,[System.Drawing.FontStyle]::Regular) $TabSeiteFortschrittsanzeige.Controls.Add($FAListeErledigteAufgaben) $FATextfeld3 = New-Object System.Windows.Forms.Label $FATextfeld3.Location = New-Object System.Drawing.Size(10,100) $FATextfeld3.Size = New-Object System.Drawing.Size(430,20) $FATextfeld3.Text = "Fortschritt Excel-Dateien beschreiben" $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld3) $FAFortschrittsbar = New-Object System.Windows.Forms.ProgressBar $FAFortschrittsbar.Location = New-Object System.Drawing.Size(10,120) $FAFortschrittsbar.Size = New-Object System.Drawing.Size(260,30) #$FAFortschrittsbar.Name = "Fortschrittsanzeige" $FAFortschrittsbar.Value = 0 $TabSeiteFortschrittsanzeige.Controls.Add($FAFortschrittsbar) $FATextfeldRealwertFortschrittsbar = New-Object System.Windows.Forms.Label # Wird verwendet, aber VSC erkennt das nicht $FATextfeld4 = New-Object System.Windows.Forms.Label $FATextfeld4.Location = New-Object System.Drawing.Size(10,170) $FATextfeld4.Size = New-Object System.Drawing.Size(140,20) $FATextfeld4.Text = "Bearbeitete Eintraege:" $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld4) $FATextfeld5 = New-Object System.Windows.Forms.Label $FATextfeld5.Location = New-Object System.Drawing.Size(10,200) $FATextfeld5.Size = New-Object System.Drawing.Size(100,20) $FATextfeld5.Text = "Gesamteintraege:" $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeld5) $FATextfeldBearbeiteteEintraege = New-Object System.Windows.Forms.Label $FATextfeldBearbeiteteEintraege.Location = New-Object System.Drawing.Size(170,170) $FATextfeldBearbeiteteEintraege.Size = New-Object System.Drawing.Size(430,20) $FATextfeldBearbeiteteEintraege.Text = "0" $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldBearbeiteteEintraege) $FATextfeldGesamtEintraege = New-Object System.Windows.Forms.Label $FATextfeldGesamtEintraege.Location = New-Object System.Drawing.Size(170,200) $FATextfeldGesamtEintraege.Size = New-Object System.Drawing.Size(430,20) $FATextfeldGesamtEintraege.Text = $($Ursprungdatei.Length) $TabSeiteFortschrittsanzeige.Controls.Add($FATextfeldGesamtEintraege) # Tab: Ausgabe doppelte Ein- und Ausgänge sowie nicht zurordnebare Betriebsmittel $TabSeiteDuplikate = New-Object System.Windows.Forms.TabPage $TabSeiteDuplikate.TabIndex = 3 $TabSeiteDuplikate.UseVisualStyleBackColor = $true $TabSeiteDuplikate.Text = "Doppelte Ein- und Ausgaenge" #Paddings $TabSeiteDuplikate.DataBindings.DefaultDataSourceUpdateMode = 0 $TabBasis.Controls.Add($TabSeiteDuplikate) $DPTextfeld1 = New-Object System.Windows.Forms.Label $DPTextfeld1.Location = New-Object System.Drawing.Size(10,10) $DPTextfeld1.Size = New-Object System.Drawing.Size(275,40) $DPTextfeld1.Text = "Bei den Eingaengen gibt es folgende Duplikate: " $TabSeiteDuplikate.Controls.Add($DPTextfeld1) $DPListeEingaenge = New-Object System.Windows.Forms.DataGridView $DPListeEingaenge.Location = New-Object System.Drawing.Size(10,60) $DPListeEingaenge.Size = New-Object System.Drawing.Size(275,20) $DPListeEingaenge.Height = 430 $DPListeEingaenge.ColumnCount = 2 $DPListeEingaenge.ColumnHeadersVisible = $true $DPListeEingaenge.Columns[0].Name = "Zeile" $DPListeEingaenge.Columns[1].Name = "Kennzeichnung" $TabSeiteDuplikate.Controls.Add($DPListeEingaenge) $DPTextfeld2 = New-Object System.Windows.Forms.Label $DPTextfeld2.Location = New-Object System.Drawing.Size(295,10) $DPTextfeld2.Size = New-Object System.Drawing.Size(275,40) $DPTextfeld2.Text = "Bei den Ausgaengen gibt es folgende Duplikate: " $TabSeiteDuplikate.Controls.Add($DPTextfeld2) $DPListeAusgaenge = New-Object System.Windows.Forms.DataGridView $DPListeAusgaenge.Location = New-Object System.Drawing.Size(295,60) $DPListeAusgaenge.Size = New-Object System.Drawing.Size(275,20) $DPListeAusgaenge.Height = 430 $DPListeAusgaenge.ColumnCount = 2 $DPListeAusgaenge.ColumnHeadersVisible = $true $DPListeAusgaenge.Columns[0].Name = "Zeile" $DPListeAusgaenge.Columns[1].Name = "Kennzeichnung" $TabSeiteDuplikate.Controls.Add($DPListeAusgaenge) $DPTextfeld3 = New-Object System.Windows.Forms.Label $DPTextfeld3.Location = New-Object System.Drawing.Size(580,10) $DPTextfeld3.Size = New-Object System.Drawing.Size(275,40) $DPTextfeld3.Text = "Folgende Eintraege konnten keinem Betriebsmittel zugewiesen werden:" $TabSeiteDuplikate.Controls.Add($DPTextfeld3) $DPListeFehler = New-Object System.Windows.Forms.DataGridView $DPListeFehler.Location = New-Object System.Drawing.Size(580,60) $DPListeFehler.Size = New-Object System.Drawing.Size(275,20) $DPListeFehler.Height = 430 $DPListeFehler.ColumnCount = 2 $DPListeFehler.ColumnHeadersVisible = $true $DPListeFehler.Columns[0].Name = "Zeile" $DPListeFehler.Columns[1].Name = "Kennzeichnung" $TabSeiteDuplikate.Controls.Add($DPListeFehler) $DPBestaetigenButton = New-Object System.Windows.Forms.Button $DPBestaetigenButton.Location = New-Object System.Drawing.Size(10,500) $DPBestaetigenButton.Size = New-Object System.Drawing.Size(860,30) $DPBestaetigenButton.Text = "Programm beenden" $DPBestaetigenButton.Add_Click({ $Fenster.Dispose() return }) $TabSeiteDuplikate.Controls.Add($DPBestaetigenButton) # Tab: Einstellungen $TabSeiteEigenschaften = New-Object System.Windows.Forms.TabPage $TabSeiteEigenschaften.TabIndex = 0 $TabSeiteEigenschaften.UseVisualStyleBackColor = $true $TabSeiteEigenschaften.Text = "Einstellungen" #Paddings $TabSeiteEigenschaften.DataBindings.DefaultDataSourceUpdateMode = 0 $TabBasis.Controls.Add($TabSeiteEigenschaften) $BasisHoehe1 = 80 #80 $BasisHoehe2 = $BasisHoehe1 + 20 #100 $BasisHoehe2x = $BasisHoehe2 + 30 #130 $BasisHoehe3 = $BasisHoehe2 + 65 #165 $BasisBreite1 = 10 #10 $BasisBreite2 = $BasisBreite1 + 70 #80 $BasisBreite3 = $BasisBreite2 + 60 #140 $BasisBreite4 = $BasisBreite3 + 210 #350 $BasisBreite5 = $BasisBreite4 + 55 #405 $ESTextfeld1 = New-Object System.Windows.Forms.Label $ESTextfeld1.Location = New-Object System.Drawing.Size($BasisBreite1,10) $ESTextfeld1.Size = New-Object System.Drawing.Size(180,20) $ESTextfeld1.Text = "Startverzeichnis Navigation:" $TabSeiteEigenschaften.Controls.Add($ESTextfeld1) $ESTextfeldStartPfad = New-Object System.Windows.Forms.Label $ESTextfeldStartPfad.Location = New-Object System.Drawing.Size(($BasisBreite1+180),10) $ESTextfeldStartPfad.Size = New-Object System.Drawing.Size(530,20) #$ESTextfeldStartPfad.Text = "$StartPfad" $TabSeiteEigenschaften.Controls.Add($ESTextfeldStartPfad) $ESAendernButton = New-Object System.Windows.Forms.Button $ESAendernButton.Location = New-Object System.Drawing.Size(730,10) $ESAendernButton.Size = New-Object System.Drawing.Size(150,30) $ESAendernButton.Text = "Aendern" $ESAendernButton.Add_Click({ StartVerzeichnisAendern }) $TabSeiteEigenschaften.Controls.Add($ESAendernButton) $ESTrollButton = New-Object System.Windows.Forms.Button $ESTrollButton.Location = New-Object System.Drawing.Size(730,50) $ESTrollButton.Size = New-Object System.Drawing.Size(150,50) $ESTrollButton.Text = "Dinge entfernen" $ESTrollButton.Add_Click({ $TabSeiteEigenschaften.Controls.Remove($ESTextBoxPrefixE) }) $TabSeiteEigenschaften.Controls.Add($ESTrollButton) #------------------- Tabelle mit ZielDateien $ESTextfeld2 = New-Object System.Windows.Forms.Label $ESTextfeld2.Location = New-Object System.Drawing.Size($BasisBreite1,50) $ESTextfeld2.Size = New-Object System.Drawing.Size(200,20) $ESTextfeld2.Text = "Zieldateien:" $TabSeiteEigenschaften.Controls.Add($ESTextfeld2) $ESTextfeld3 = New-Object System.Windows.Forms.Label $ESTextfeld3.Location = New-Object System.Drawing.Size(($BasisBreite1+30),$BasisHoehe1) $ESTextfeld3.Size = New-Object System.Drawing.Size(80,20) $ESTextfeld3.Text = "Prefix für" $TabSeiteEigenschaften.Controls.Add($ESTextfeld3) $ESTextfeld4 = New-Object System.Windows.Forms.Label $ESTextfeld4.Location = New-Object System.Drawing.Size($BasisBreite1,$BasisHoehe2) $ESTextfeld4.Size = New-Object System.Drawing.Size(50,20) $ESTextfeld4.Text = "Eingang" $TabSeiteEigenschaften.Controls.Add($ESTextfeld4) $ESTextfeld5 = New-Object System.Windows.Forms.Label $ESTextfeld5.Location = New-Object System.Drawing.Size(($BasisBreite2-5),$BasisHoehe2) $ESTextfeld5.Size = New-Object System.Drawing.Size(55,20) $ESTextfeld5.Text = "Ausgang" $TabSeiteEigenschaften.Controls.Add($ESTextfeld5) $ESTextfeld6 = New-Object System.Windows.Forms.Label $ESTextfeld6.Location = New-Object System.Drawing.Size($BasisBreite3,$BasisHoehe1) $ESTextfeld6.Size = New-Object System.Drawing.Size(150,40) $ESTextfeld6.Text = "Dateiname" $TabSeiteEigenschaften.Controls.Add($ESTextfeld6) $ESTextfeld7 = New-Object System.Windows.Forms.Label $ESTextfeld7.Location = New-Object System.Drawing.Size($BasisBreite4,$BasisHoehe1) $ESTextfeld7.Size = New-Object System.Drawing.Size(110,20) $ESTextfeld7.Text = "Konvertierungsart" $TabSeiteEigenschaften.Controls.Add($ESTextfeld7) $ESTextfeld8 = New-Object System.Windows.Forms.Label $ESTextfeld8.Location = New-Object System.Drawing.Size($BasisBreite4,$BasisHoehe2) $ESTextfeld8.Size = New-Object System.Drawing.Size(50,20) $ESTextfeld8.Text = "Simpel" $TabSeiteEigenschaften.Controls.Add($ESTextfeld8) $ESTextfeld9 = New-Object System.Windows.Forms.Label $ESTextfeld9.Location = New-Object System.Drawing.Size($BasisBreite5,$BasisHoehe2) $ESTextfeld9.Size = New-Object System.Drawing.Size(50,20) $ESTextfeld9.Text = "TIA" $TabSeiteEigenschaften.Controls.Add($ESTextfeld9) #--------------------------- Eintrag hinzufuegen Elemente $ESTextBoxPrefixENew = New-Object System.Windows.Forms.TextBox $ESTextBoxPrefixENew.Location = New-Object System.Drawing.Size($BasisBreite1,$Basishoehe2x) $ESTextBoxPrefixENew.Size = New-Object System.Drawing.Size(40,20) $ESTextBoxPrefixENew.Name = "ESTextfeldENew" $ESTextBoxPrefixENew.Add_Click({ Write-Host "Ausgabe bei ESTextfeldENew" }.GetNewClosure()) $TabSeiteEigenschaften.Controls.Add($ESTextBoxPrefixENew) $ESTextBoxPrefixANew = New-Object System.Windows.Forms.TextBox $ESTextBoxPrefixANew.Location = New-Object System.Drawing.Size($BasisBreite2,$Basishoehe2x) $ESTextBoxPrefixANew.Size = New-Object System.Drawing.Size(40,20) $ESTextBoxPrefixANew.Name = "ESTextfeldANew" $ESTextBoxPrefixANew.Add_Click({ Write-Host "Ausgabe bei Button ESTextfeldANew" }.GetNewClosure()) $TabSeiteEigenschaften.Controls.Add($ESTextBoxPrefixANew) $ESTextfeldDateiNameNew = New-Object System.Windows.Forms.TextBox $ESTextfeldDateiNameNew.Location = New-Object System.Drawing.Size($BasisBreite3,$Basishoehe2x) $ESTextfeldDateiNameNew.Size = New-Object System.Drawing.Size(200,20) $ESTextfeldDateiNameNew.Name = "ESTextfeldDateiNameNew" $ESTextfeldDateiNameNew.Add_Click({ Write-Host "Ausgabe bei Button ESTextfeldDateiNameNew" }.GetNewClosure()) $TabSeiteEigenschaften.Controls.Add($ESTextfeldDateiNameNew) $ESRadioButtonSimpelNew = New-Object System.Windows.Forms.RadioButton $ESRadioButtonSimpelNew.Location = New-Object System.Drawing.Size(15,10) $ESRadioButtonSimpelNew.Size = New-Object System.Drawing.Size(17,17) $ESRadioButtonSimpelNew.Name = "ESRadioButtonSimpelNew" $ESRadioButtonTIANew = New-Object System.Windows.Forms.RadioButton $ESRadioButtonTIANew.Location = New-Object System.Drawing.Size(60,10) $ESRadioButtonTIANew.Size = New-Object System.Drawing.Size(17,17) $ESRadioButtonTIANew.Name = "ESRadioButtonTIANew" $ESGroupBoxRadioButtonsNew = New-Object System.Windows.Forms.GroupBox $ESGroupBoxRadioButtonsNew.Location = New-Object System.Drawing.Size($BasisBreite4,($BasisHoehe2x-5)) $ESGroupBoxRadioButtonsNew.Size = New-Object System.Drawing.Size(85,30) $ESGroupBoxRadioButtonsNew.Controls.Add($ESRadioButtonSimpelNew) $ESGroupBoxRadioButtonsNew.Controls.Add($ESRadioButtonTIANew) $TabSeiteEigenschaften.Controls.Add($ESGroupBoxRadioButtonsNew) $ESHinzufuegenButton = New-Object System.Windows.Forms.Button $ESHinzufuegenButton.Location = New-Object System.Drawing.Size(730,$BasisHoehe2x) $ESHinzufuegenButton.Size = New-Object System.Drawing.Size(150,30) $ESHinzufuegenButton.Text = "Eintrag hinzufuegen" $ESHinzufuegenButton.Add_Click({ Write-Host "Eintrag hinzufuegen" if ($ESRadioButtonTIANew.Checked) { $WandlungsTyp = "TIA" } else { $WandlungsTyp = "Simpel" } Write-Host "WandlungsTyp: " $WandlungsTyp $NeueZielDatei = @([PSCustomObject]@{ PrefixEingang = $ESTextBoxPrefixENew.Text PrefixAusgang = $ESTextBoxPrefixANew.Text DateiName = $ESTextfeldDateiNameNew.Text WandlungsTyp = $WandlungsTyp }) EinstellungsDateiAendern "New" $FaktorHoehe $ZielDateien $NeueZielDatei }) $TabSeiteEigenschaften.Controls.Add($ESHinzufuegenButton) # Wird benoetigt, um die Anzahl der Eintraege der dynamisch erstellten Variablen zu speichern $ESAnzahlEintraegeTextfeld = New-Object System.Windows.Forms.Label AnzeigeEinstellungenAktualisieren $Fenster.Add_Shown({$Fenster.Activate()}) [void]$Fenster.ShowDialog() return } #------------------- Funktion nur für das txt-GUI -------------------------- Function TXTReaktionReturn ($Pfad) { if (PfadExistiert $Pfad) { # Gültiger Pfad oder .txt-Datei $PfadEnde = $(Split-Path $Pfad -Leaf) if ($($PfadEnde -match ".txt")) { #$Fenster.Dispose() ZuVERSpringen # Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht richtig $TXTPfadFeld.Text = $Pfad return } else { AnzeigeAktualisieren "txt" $Pfad } } else { # Laufwerke aktualisieren oder ungültiger Pfad AnzeigeAktualisieren "txt" "" } return } #------------------- Funktion nur für das VerzeichnisWaehlen-GUI -------------------------- # Führt $Pfad und $Auswahl zusammen und überprüft ob der daraus resultierte neue Pfad vorhanden ist. Falls dies der Fall ist wird in den Bereich der Fortschrittsanzeige gewechselt Function VERAuswahlBestaetigt($Pfad, $Auswahl) { $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve if (PfadExistiert $Pfad) { ZuFASpringen $VERPfadfeld.Text = $Pfad return } } #------------------- Funktionen zum wechseln der Tabs -------------------------- Function ZuVERSpringen { AnzeigeAktualisieren "ver" $TXTPfadFeld.Text AufgabenAktualisieren "Zielverzeichnis auswaehlen" Write-Host "Gewaehlte txt-Datei: " $TXTPfadFeld.Text $TabBasis.SelectedIndex = 1 } Function ZuFASpringen { # Falls Einstellungen eingefügt werden: in dieser Funktion viel Todo AufgabenAktualisieren "Zieldateinamen erstellen" Write-Host "Gewaehltes Verzeichnis: " $VERPfadFeld.Text $TabBasis.SelectedIndex = 2 $PfadUrsprungsdatei = $TXTPfadFeld.Text $PfadZielDateien = $VERPfadFeld.Text $PfadDateiEA = ExcelDateiNameErstellen "EA" $PfadUrsprungsdatei $PfadZielDateien $PfadDateiDIDQ = ExcelDateiNameErstellen "DIDQ" $PfadUrsprungsdatei $PfadZielDateien AufgabenAktualisieren "Neue Excel-Dateien erstellen" ExcelDateiErstellen $PfadDateiEA ExcelDateiErstellen $PfadDateiDIDQ AufgabenAktualisieren "Excel-Dateien mit Inhalten befuellen und Duplikate finden" $AlleGleichenEA = ExcelDateiBeschreibenStandard $PfadUrsprungsdatei "E" "A" $PfadDateiEA $AlleGleichenDIDQ = ExcelDateiBeschreibenSpezial $PfadUrsprungsdatei "%I" "%Q" $PfadDateiDIDQ #Write-Host "Gleiche EA nach Rückgabe: " $AlleGleichenEA $GleicheEingaenge = $AlleGleichenEA[0] $GleicheAusgaenge = $AlleGleichenEA[1] $Fehler = $AlleGleichenEA[2] Write-Host "Gleiche Eingaenge: " $GleicheEingaenge Write-Host "Gleiche Ausgaenge: " $GleicheAusgaenge Write-Host "Fehler: " $Fehler AufgabenAktualisieren "Ausgabe Duplikate" ZuDPSpringen $GleicheEingaenge $GleicheAusgaenge $Fehler } Function ZuDPSpringen ($GleicheEingaenge, $GleicheAusgaenge, $Fehler) { foreach ($GleichenEingang in $GleicheEingaenge) { $DPListeEingaenge.Rows.Add($($GleichenEingang.Zeile),($GleichenEingang.Name)) } foreach ($GleichenAusgang in $GleicheAusgaenge) { $DPListeAusgaenge.Rows.Add($($GleichenAusgang.Zeile),($GleichenAusgang.Name)) } foreach ($Fehlen in $Fehler) { $DPListeFehler.Rows.Add($($Fehlen.Zeile),($Fehlen.Name)) } $TabBasis.SelectedIndex = 3 } #------------------- Funktionen für alle GUIs -------------------------- # Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles # Um die Laufwerke anzuzeigen, muss der $Pfad = "" sein Function AnzeigeAktualisieren ($AuswahlTyp, $Pfad) { # Write-Host "Übergebener Pfad: " $Pfad # Sicherstellen, dass es das Verzeichnis gibt if (PfadExistiert $Pfad) { Write-Host "Ordner anzeigen" $Optionen = Optionen $AuswahlTyp $Pfad } elseif ($Pfad.Length -eq 0) { Write-Host "Laufwerke anzeigen" $Optionen = LaufwerkeFinden $Pfad = "" } else { AnzeigeAktualisieren "" return } if ($($AuswahlTyp -eq "txt")) { $TXTPfadFeld.Text = $Pfad $TXTListeOrdnernamen.Items.Clear() foreach ($Option in $Optionen) { if ($Option.Length -gt 0) { $TXTListeOrdnernamen.Items.Add($Option) } } } elseif ($($AuswahlTyp -eq "ver")) { $VERPfadFeld.Text = $Pfad $VERListeOrdnernamen.Items.Clear() foreach ($Option in $Optionen) { if ($Option.Length -gt 0) { $VERListeOrdnernamen.Items.Add($Option) } } } return } Function VerzeichnisAuswaehlen ($AuswahlTyp, $Pfad, $Auswahl) { if (PfadExistiert $Pfad) { $Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve } elseif ($Pfad.Length -eq 0) { #Wenn der Pfad die Länge 0 hat, wurde ein Laufwerk gewählt $Pfad = $Auswahl } else { #Fehlerfall/ ungültiger Pfad: zurück zu Laufwerken navigieren $Pfad = "" } # Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen if ($($($Auswahl -match ".txt") -and $($AuswahlTyp -eq "txt"))) { # Für den Gesamtfortschritt Anzahl Dateien auslesen $Datei = Get-Content $Pfad $FATextfeldGesamtEintraege.Text = 2 * $($Datei.Length) # Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad # Write-Host "Dateityp: " $Pfad.GetType() ZuVERSpringen # Ist zwar sachlich gesehen unsinn, aber sonst funktioniert Return in der GUI nicht $TXTPfadFeld.Text = $Pfad return } AnzeigeAktualisieren $AuswahlTyp $Pfad return } Function VerzeichnisZurueck ($AuswahlTyp, $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 zurueck" # Fehler/ Nichts tun? # Ermitteln: wann tritt dieser Fall ein? $Pfad = "" } AnzeigeAktualisieren $AuswahlTyp $Pfad return } Function TastenReaktionPfadFeld($AuswahlTyp, $Taste) { # Write-Host "Übergebene Taste: " $Taste if ($AuswahlTyp -eq "txt") { switch ($Taste){ "Return" { # Write-Host "Enter gedrückt" $Pfad = $TXTPfadFeld.Text # Write-Host "Pfad: " $Pfad TXTReaktionReturn $Pfad } Default { # Write-Host "Gedrückte Taste: " $Taste } } } elseif ($AuswahlTyp -eq "ver") { switch ($Taste) { "Return" { $Pfad = $VERPfadFeld.Text AnzeigeAktualisieren "ver" $Pfad } # Entfernt, da man sonst im PfadFeld nicht groß schreiben kann! <#"ShiftKey" { $Pfad = $VERPfadFeld.Text $Auswahl = $VERListeOrdnernamen.SelectedItem ReaktionShiftKey $Pfad $Auswahl }#> Default { # Write-Host "Gedrückte Taste: " $Taste } } } return } Function TastenReaktionListeOrdnernamen($AuswahlTyp, $Taste) { # Write-Host "Übergebene Taste: " $Taste if ($AuswahlTyp -eq "txt"){ switch ($Taste){ "Return" { # Write-Host "Enter gedrückt" $Auswahl = $TXTListeOrdnernamen.SelectedItem $Pfad = $TXTPfadFeld.Text # Write-Host "Auswahl: " $Auswahl # Write-Host "Pfad: " $Pfad VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl } "Back" { # Write-Host "Back gedrückt" $Pfad = $TXTPfadFeld.Text # Write-Host "Pfad: " $Pfad # Pfad aktualisieren VerzeichnisZurueck $AuswahlTyp $Pfad } Default { # Write-Host "Gedrückte Taste: " $Taste } } } elseif ($AuswahlTyp -eq "ver") { switch ($Taste) { "Return" { $Auswahl = $VERListeOrdnernamen.SelectedItem $Pfad = $VERPfadFeld.Text VerzeichnisAuswaehlen $AuswahlTyp $Pfad $Auswahl } "Back" { $Pfad = $VERPfadFeld.Text VerzeichnisZurueck $AuswahlTyp $Pfad } "ShiftKey" { $Pfad = $VERPfadFeld.Text $Auswahl = $VERListeOrdnernamen.SelectedItem ReaktionShiftKey $Pfad $Auswahl } Default { # Write-Hoste "Gedrückte Taste: " $Taste } } } return } Function TastenReaktionButtons($AuswahlTyp, $Taste) { # Write-Host "Übergebene Taste: " $Taste if ($AuswahlTyp -eq "txt") { switch ($Taste){ "Back" { # Write-Host "Back gedrückt" $Pfad = $TXTPfadFeld.Text # Write-Host "Pfad: " $Pfad # Pfad aktualisieren VerzeichnisZurueck $AuswahlTyp $Pfad } Default { # Write-Host "Gedrückte Taste: " $Taste } } } elseif ($AuswahlTyp -eq "ver") { switch ($Taste) { "Back" { $Pfad = $VERPfadFeld.Text VerzeichnisZurueck $AuswahlTyp $Pfad } "ShiftKey" { $Pfad = $VERPfadFeld.Text $Auswahl = $VERListeOrdnernamen.SelectedItem ReaktionShiftKey $Pfad $Auswahl } Default { # Write-Host "Gedrückte Taste: " $Taste } } } return } Function Optionen($AuswahlTyp, $Pfad) { # Unterordner und .txt-Dateien finden # Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner, die mit "_" beginnen, nicht gefunden werden können [System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad if ($AuswahlTyp -eq "txt") { $TxtDateien = TxtDateienFinden $Pfad #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück $Optionen = $UnterOrdner + $TxtDateien } elseif ($AuswahlTyp -eq "ver") { #Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück $Optionen = $UnterOrdner } return $Optionen } Function PfadExistiert ($Pfad) { # Um Abzufangen, dass Test-Path mit leerem Wert durchlaufen wird. Leere Verzeichnisse gelten als ungültig. if ($Pfad.Length -eq 0) { return $false } 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) { $UnterOrdner = $(Get-ChildItem $Pfad -Directory) if ($($UnterOrdner.Length -gt 0)) { $Ordner = $(Split-Path $UnterOrdner -Leaf) } else { $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 { AnzeigeAktualisieren "ver" "" } return } Function AufgabenAktualisieren ($Aufgabe) { $FAListeErledigteAufgaben.Items.Add($FATextfeldAktuelleAufgabe.Text) $FATextfeldAktuelleAufgabe.Text = $Aufgabe } Function DateiBeschreibenAktualisieren { $AnteilJeBeschriftung = 100 / $($FATextfeldGesamtEintraege.Text) [System.double] $FATextfeldRealwertFortschrittsbar.Text += $AnteilJeBeschriftung #Da $FAFortschrittsbar.Value anscheinend ein int ist, ist der letzte Wert i. d. R. höher als 100 -> Fehler, der hiermit abgefangen wird if ($([System.Double]$FATextfeldRealwertFortschrittsbar.Text) -ge 100) { $FAFortschrittsbar.Value = 100 } else { $FAFortschrittsbar.Value = $FATextfeldRealwertFortschrittsbar.Text } [System.Int64] $BearbeiteteEintraege = $FATextfeldBearbeiteteEintraege.Text $BearbeiteteEintraege++ $FATextfeldBearbeiteteEintraege.Text = $BearbeiteteEintraege } #--------------------------------------- Start Funktionen für Einstellungen ------------------------------- Function PfadEinstellungsDateiHolen () { # Könnte man eigentlich in einer Zeile machen, PS macht da aber Probleme $AktuellesVerzeichnis = Get-Location $PfadEinstellungsDatei = $("$AktuellesVerzeichnis\" + "EinstellungenSkriptKonvertierung.txt") Write-Host "Pfad Einstellungsdatei: " $PfadEinstellungsDatei return $PfadEinstellungsDatei } Function StartPfadHolen () { # Evtl. aendern um gegen Probleme abzusichern: "Pfad|" oder "StartPfad|" vor den Pfad schreiben und danach suchen. Falls es kein Ergebnis gibt, einfuegen. Ausserdem waere dann die Reihenfolge egal. $PfadEinstellungsDatei = PfadEinstellungsDateiHolen $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei $StartPfad = $EinstellungsInhalte[0] return $StartPfad } Function ZielDateienHolen () { $PfadEinstellungsDatei = PfadEinstellungsDateiHolen $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei foreach ($EinstellungsZeile in $EinstellungsInhalte) { $EinstellungsInhalt = $EinstellungsZeile.Split("|") if ($EinstellungsInhalt[0] -eq "Datei") { $ZielDateien += @([PSCustomObject]@{ PrefixEingang = $EinstellungsInhalt[1] PrefixAusgang = $EinstellungsInhalt[2] DateiName = $EinstellungsInhalt[3] WandlungsTyp = $EinstellungsInhalt[4] }) } } return $ZielDateien } Function EinstellungsDateiVorhanden () { $PfadEinstellungsDatei = PfadEinstellungsDateiHolen if (Test-Path $PfadEinstellungsDatei) { #Es gibt eine Datei mit den Einstellungen -> auslesen #Todo: Checken, ob Inhalte plausibel sind -> ggf. neue mit Standardwerten erstellen! $ZielDateien = ZielDateienHolen } else { #Es gibt keine Datei mit den Einstellungen -> erstellen #Todo: Umbauen: Eintraege via EinstellungsDateiAendern hinzufuegen!!! # Mögliches Problem mit der Funktion "StartVerzeichnisAendern". Überprüfen! New-Item $PfadEinstellungsDatei -ItemType File $StartPfad = Get-Location $ZielDateien = @([PSCustomObject]@{ PrefixEingang = "E" PrefixAusgang = "A" DateiName = "EA_[Ursprungsdatei]" WandlungsTyp = "Simpel" }) $ZielDateien += @([PSCustomObject]@{ PrefixEingang = "%I" PrefixAusgang = "%Q" DateiName = "DIDQ_[Ursprungsdatei]" WandlungsTyp = "TIA" }) Add-Content $PfadEinstellungsDatei $($StartPfad) Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDateien[0].PrefixEingang + "|" + $ZielDateien[0].PrefixAusgang + "|" + $ZielDateien[0].DateiName + "|" + $ZielDateien[0].WandlungsTyp) Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDateien[1].PrefixEingang + "|" + $ZielDateien[1].PrefixAusgang + "|" + $ZielDateien[1].DateiName + "|" + $ZielDateien[1].WandlungsTyp) } return $ZielDateien } Function AnzeigeEinstellungenAktualisieren () { # Neue Werte sollen nicht übergeben werden, sondern aus der Einstellungsdatei ausgelesen werden, um Fehler zu vermeiden. # Einzige Voraussetzung: es muss eine Einstellungsdatei geben! $PfadEinstellungsDatei = PfadEinstellungsDateiHolen #Write-Host "Ansicht Einstellungen aktualisieren mit dem Verzeichnis: " $PfadEinstellungsDatei # Entfernen der vorher erstellten Einträge $AnzahlAlteEintraege = $ESAnzahlEintraegeTextfeld.Text Write-Host "Anzahl ermittelter Eintraege -1: " $AnzahlAlteEintraege #Abfangen: falls es keine Eintrage gibt, wird dennoch in die Schleife gesprungen, da $AnzahlAlteEintraege dennoch 0 ist. In diesem Fall neue Eintraege erstellen? for ($i = 0; $i -le $AnzahlAlteEintraege; $i++) { $TextBoxEExistiert = Test-Path Variable:\ESTextBoxPrefixE Write-Host "Text Box E existiert: " $TextBoxEExistiert $TabSeiteEigenschaften.Controls.Remove($ESTextBoxPrefixE) $TabSeiteEigenschaften.Controls.Remove($ESTextBoxPrefixA) $TabSeiteEigenschaften.Controls.Remove($ESTextfeldDateiName) $TabSeiteEigenschaften.Controls.Remove($ESRadioButtonSimpel) $TabSeiteEigenschaften.Controls.Remove($ESRadioButtonTIA) $TabSeiteEigenschaften.Controls.Remove($ESGroupBoxRadioButtons) $TabSeiteEigenschaften.Controls.Remove($ESLoeschenButton) $TabSeiteEigenschaften.Controls.Remove($ESSpeichernButton) } # Erstellen der neuen Einträge $EinstellungsInhalte = Get-Content $PfadEinstellungsDatei $StartPfad = $EinstellungsInhalte[0] foreach ($EinstellungsZeile in $EinstellungsInhalte) { $EinstellungsBestandteile = $EinstellungsZeile.Split("|") if ($EinstellungsBestandteile[0] -eq "Datei") { $ZielDateien += @([PSCustomObject]@{ PrefixEingang = $EinstellungsBestandteile[1] PrefixAusgang = $EinstellungsBestandteile[2] DateiName = $EinstellungsBestandteile[3] WandlungsTyp = $EinstellungsBestandteile[4] }) } } $BasisHoehe1 = 80 #80 $BasisHoehe2 = $BasisHoehe1 + 20 #100 $BasisHoehe2x = $BasisHoehe2 + 30 #130 $BasisHoehe3 = $BasisHoehe2 + 65 #165 $BasisBreite1 = 10 #10 $BasisBreite2 = $BasisBreite1 + 70 #80 $BasisBreite3 = $BasisBreite2 + 60 #140 $BasisBreite4 = $BasisBreite3 + 210 #350 $BasisBreite5 = $BasisBreite4 + 55 #405 $ESTextfeldStartPfad.Text = $StartPfad $ESTextBoxPrefixENew.Text = "" $ESTextBoxPrefixANew.Text = "" $ESTextfeldDateiNameNew.Text = "" $ESRadioButtonSimpelNew.Checked = $false $ESRadioButtonTIANew.Checked = $false Write-Host "Alle ZielDateien: " $ZielDateien $FaktorHoehe = 0 foreach ($ZielDatei in $ZielDateien) { # Problem bei diesem Ansatz: $FaktorHoehe wird nicht durch den Zahlenwert ersetzt <# ${ESSpezial$FaktorHoehe} = New-Object System.Windows.Forms.TextBox ${ESSpezial$FaktorHoehe}.Location = New-Object System.Drawing.Size(20,400) $TabSeiteEigenschaften.Controls.Add(${ESSpezial$FaktorHoehe}) #> # Anderer Ansatz: Alles in {}.getNewClosure() schreiben. Funktioniert nicht, weil dabei alles innerhalb der {} als Text ausgegeben wird. $ESTextBoxPrefixE = New-Object System.Windows.Forms.TextBox $ESTextBoxPrefixE.Location = New-Object System.Drawing.Size($BasisBreite1,($BasisHoehe3+35*$FaktorHoehe)) $ESTextBoxPrefixE.Size = New-Object System.Drawing.Size(40,20) $ESTextBoxPrefixE.Text = $ZielDatei.PrefixEingang $ESTextBoxPrefixE.Name = "ESTextBoxPrefixE" $ESTextBoxPrefixE.Add_Click({ Write-Host "Mein Name ist " $ESTextBoxPrefixE.Name }.GetNewClosure()) $TabSeiteEigenschaften.Controls.Add($ESTextBoxPrefixE) $ESTextBoxPrefixA = New-Object System.Windows.Forms.TextBox $ESTextBoxPrefixA.Location = New-Object System.Drawing.Size($BasisBreite2,($BasisHoehe3+35*$FaktorHoehe)) $ESTextBoxPrefixA.Size = New-Object System.Drawing.Size(40,20) $ESTextBoxPrefixA.Text = $ZielDatei.PrefixAusgang $ESTextBoxPrefixA.Name = "ESTextfeldA$FaktorHoehe" $ESTextBoxPrefixA.Add_Click({ }.GetNewClosure()) $TabSeiteEigenschaften.Controls.Add($ESTextBoxPrefixA) $ESTextfeldDateiName = New-Object System.Windows.Forms.TextBox $ESTextfeldDateiName.Location = New-Object System.Drawing.Size($BasisBreite3,($BasisHoehe3+35*$FaktorHoehe)) $ESTextfeldDateiName.Size = New-Object System.Drawing.Size(200,20) $ESTextfeldDateiName.Text = $ZielDatei.DateiName $ESTextfeldDateiName.Name = "ESTextfeldDateiName$FaktorHoehe" $ESTextfeldDateiName.Add_Click({ }.GetNewClosure()) $TabSeiteEigenschaften.Controls.Add($ESTextfeldDateiName) $ESRadioButtonSimpel = New-Object System.Windows.Forms.RadioButton $ESRadioButtonSimpel.Location = New-Object System.Drawing.Size(15,10) $ESRadioButtonSimpel.Size = New-Object System.Drawing.Size(17,17) $ESRadioButtonSimpel.Name = "ESRadioButtonSimpel$FaktorHoehe" $ESRadioButtonTIA = New-Object System.Windows.Forms.RadioButton $ESRadioButtonTIA.Location = New-Object System.Drawing.Size(60,10) $ESRadioButtonTIA.Size = New-Object System.Drawing.Size(17,17) $ESRadioButtonTIA.Name = "ESRadioButtonTIA$FaktorHoehe" $ESGroupBoxRadioButtons = New-Object System.Windows.Forms.GroupBox $ESGroupBoxRadioButtons.Location = New-Object System.Drawing.Size($BasisBreite4,($BasisHoehe3-5+35*$FaktorHoehe)) $ESGroupBoxRadioButtons.Size = New-Object System.Drawing.Size(85,30) $ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonSimpel) $ESGroupBoxRadioButtons.Controls.Add($ESRadioButtonTIA) $TabSeiteEigenschaften.Controls.Add($ESGroupBoxRadioButtons) if ($ZielDatei.WandlungsTyp -eq "TIA") { $ESRadioButtonTIA.Checked = $true } else { $ESRadioButtonSimpel.Checked = $true } $ESLoeschenButton = New-Object System.Windows.Forms.Button $ESLoeschenButton.Location = New-Object System.Drawing.Size(730,($BasisHoehe3+35*$FaktorHoehe)) $ESLoeschenButton.Size = New-Object System.Drawing.Size(150,30) $ESLoeschenButton.Text = "Loeschen" $ESLoeschenButton.Add_Click({ Write-Host "Loeschen von " $ZielDatei.DateiName " mit i-Wert " $FaktorHoehe Write-Host "ZielDateien vor Übergabe: " $ZielDateien # Todo: Falls es dadurch keine zu erstellenden Eintraege mehr gibt, entweder loeschen verhindern oder neue Eintraege erstellen EinstellungsDateiAendern "Del" $FaktorHoehe $ZielDateien "" }.GetNewClosure()) $TabSeiteEigenschaften.Controls.Add($ESLoeschenButton) $ESSpeichernButton = New-Object System.Windows.Forms.Button $ESSpeichernButton.Location = New-Object System.Drawing.Size(570,($BasisHoehe3+35*$FaktorHoehe)) $ESSpeichernButton.Size = New-Object System.Drawing.Size(150,30) $ESSpeichernButton.Text = "Aenderungen Speichern" $ESSpeichernButton.Add_Click({ Write-Host "Speichern von " $ZielDatei.DateiName " mit i-Wert " $FaktorHoehe if ($ESRadioButtonTIA.Checked) { $WandlungsTyp = "TIA" } else { $WandlungsTyp = "Simpel" } Write-Host "Wandlungstyp: " $WandlungsTyp $ZielDateiNeu = @([PSCustomObject]@{ PrefixEingang = $ESTextBoxPrefixE.Text PrefixAusgang = $ESTextBoxPrefixA.Text DateiName = $ESTextfeldDateiName.Text WandlungsTyp = $WandlungsTyp }) Write-Host "Neue ZielDatei vor Übergabe: " $ZielDateiNeu EinstellungsDateiAendern "Upd" $FaktorHoehe $ZielDateien $ZielDateiNeu }.GetNewClosure()) $TabSeiteEigenschaften.Controls.Add($ESSpeichernButton) Write-Host "Counter i: " $FaktorHoehe Write-Host "Wert Zieldatei: " $ZielDatei $ESAnzahlEintraegeTextfeld.Text = $FaktorHoehe $FaktorHoehe++ } } Function StartVerzeichnisAendern () { $Explorer = New-Object System.Windows.Forms.FolderBrowserDialog $Explorer.ShowDialog() $Pfad = $Explorer.SelectedPath Write-Host "Einstellungsdatei: " $PfadEinstellungsDatei Write-Host "Pfad: " $Pfad #$PfadEinstellungsDatei | Out-File -FilePath $PfadEinstellungsDatei $DateiInhalt = Get-Content $PfadEinstellungsDatei $DateiInhalt[0] = $Pfad Clear-Content $PfadEinstellungsDatei Add-Content $PfadEinstellungsDatei $DateiInhalt AnzeigeAktualisieren "txt" $Pfad AnzeigeAktualisieren "ver" $Pfad AnzeigeEinstellungenAktualisieren } Function EinstellungsDateiAendern($Art, $Eintrag, $ZielDateien, $ZielDatei) { # Aendern: Nicht mehr $ZielDateien uebergeben, sondern Verzeichnis der Einstellungsdatei holen und %ZielDateien selber erstellen # Anpassen von $ZielDateien switch ($Art) { New { Write-Host "[New] Alte ZielDateien: " $ZielDateien $ZielDateien += $ZielDatei Write-Host "[New] Neue ZielDateien: " $ZielDateien # Felder leeren # Todo: auslagern in AnzeigenEinstellungenAktualisieren. Soll auch gemacht werden, nachdem Einträge geloescht oder veraendert wurden! $ESTextBoxPrefixENew.Text = "" $ESTextBoxPrefixANew.Text = "" $ESTextfeldDateiNameNew.Text = "" $ESRadioButtonSimpelNew.Checked = $false $ESRadioButtonTIANew.Checked = $false } Upd { Write-Host "[Upd] Alte ZielDateien: " $ZielDateien Write-Host "Einzufuegende Zieldatei: " $ZielDatei $ZielDateien[$Eintrag] = $ZielDatei Write-Host "[Upd] Neue ZielDateien: " $ZielDateien } Del { Write-Host "[Del] Alte ZielDateien: " $ZielDateien ", Eintrag: " $Eintrag $i = 0 foreach ($ZielDatei in $ZielDateien) { if ($Eintrag -ne $i) { # Todo: Fehler, wenn man erst Eintrag hinzufuegt und anschließend wieder entfernt ("Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition") $NeueZielDateien += $ZielDatei } $i++ } Clear-Variable ZielDateien $ZielDateien = $NeueZielDateien Write-Host "[Del] Neue ZielDateien: " $ZielDateien } Default {} } # Schreiben in Einstellungsdatei $StartPfad = StartPfadHolen $PfadEinstellungsDatei = PfadEinstellungsDateiHolen # Loeschen der Inhalte der Einstellungsdatei Clear-Content $PfadEinstellungsDatei Write-Host "StartPfad: " $StartPfad " Pfad Einstellungsdatei: " $PfadEinstellungsDatei Add-Content $PfadEinstellungsDatei $StartPfad foreach ($ZielDatei in $ZielDateien) { Add-Content $PfadEinstellungsDatei $("Datei|" + $ZielDatei.PrefixEingang + "|" + $ZielDatei.PrefixAusgang + "|" + $ZielDatei.DateiName + "|" + $ZielDatei.WandlungsTyp) } # Anzeige in Einstellungen aktualisieren AnzeigeEinstellungenAktualisieren } #--------------------------------------- Ende Funktionen für GUI ------------------------------- Function ExcelDateiNameErstellen ($Prefix, $PfadUrsprungsdatei, $PfadZielDatei) { $BasisNameZielDatei = Split-Path $PfadUrsprungsdatei -Leaf $BasisNameZielDateiLaenge = $BasisNameZielDatei.Length $BasisNameZielDateiKurz = $BasisNameZielDatei.Substring(0, $($BasisNameZielDateiLaenge - 4)) $GesamtPfadZielDatei = $PfadZielDatei + "\" + $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 ExcelDateiBeschreibenStandard ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) { $Datei = New-Object -ComObject Excel.Application $Mappe = $Datei.Workbooks.Open($ZielDatei) $Blatt = $Mappe.WorkSheets.item(1) $Datei.Visible = $false $i = 1 $Eingaenge = @() $ZuEingang = @("B", "S", "E", "I", "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") $Ausgaenge = @() $ZuAusgang = @("K", "O", "Q,", "M", "A", "P", "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 -replace "[\d]") -in $ZuEingang)) { $BMKZahl = $BMKZahl -replace("[a-zA-Z]","") $BMKZahlLaenge = $($BMKZahl.Length - 1) $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) $BMKZahl = $PrefixEingang + $BMKZahl $Eingaenge += @([PSCustomObject]@{ Name = $BMKZahl Zeile = $i }) } elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang)) { $BMKZahl = $BMKZahl -replace("[a-zA-Z]","") $BMKZahlLaenge = $($BMKZahl.Length - 1) $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) $BMKZahl = $PrefixAusgang + $BMKZahl $Ausgaenge += @([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++ DateiBeschreibenAktualisieren } $Mappe.Save() $Datei.Quit() $GleicheEingaenge = GleicheFinden $Eingaenge $GleicheAusgaenge = GleicheFinden $Ausgaenge Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge Write-Host "Fehler bei: " $Fehler if ( $($Fehler.Length -eq 0)) { $Fehler += @([PSCustomObject]@{ Name = "Keine" Zeile = "Alle" }) } return $GleicheEingaenge, $GleicheAusgaenge, $Fehler } Function ExcelDateiBeschreibenSpezial ($PfadUrsprungsdatei, $PrefixEingang, $PrefixAusgang, $ZielDatei) { $Datei = New-Object -ComObject Excel.Application $Mappe = $Datei.Workbooks.Open($ZielDatei) $Blatt = $Mappe.WorkSheets.item(1) $Datei.Visible = $false $i = 2 $Eingaenge = @() $ZuEingang = @("B", "S", "E", "I", "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") $Ausgaenge = @() $ZuAusgang = @("K", "O", "Q,", "M", "A", "P", "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 = @() $Blatt.Cells.Item(1,1) = "Name" $Blatt.Cells.Item(1,2) = "Path" $Blatt.Cells.Item(1,3) = "Data Type" $Blatt.Cells.Item(1,4) = "Logical Address" $Blatt.Cells.Item(1,5) = "Comment" $Blatt.Cells.Item(1,6) = "Hmi Visible" $Blatt.Cells.Item(1,7) = "Hmi Accessible" $Blatt.Cells.Item(1,8) = "Hmi Writeable" $Blatt.Cells.Item(1,9) = "Typeobject ID" $Blatt.Cells.Item(1,10) = "Version ID" $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 -replace "[\d]") -in $ZuEingang)) { $BMKZahl = $BMKZahl -replace("[a-zA-Z]","") $BMKZahlLaenge = $($BMKZahl.Length - 1) $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) $BMKZahl = $PrefixEingang + $BMKZahl $Eingaenge += @([PSCustomObject]@{ Name = $BMKZahl Zeile = $i }) } elseif ($($($BMKZahl -replace "[\d]") -in $ZuAusgang)) { $BMKZahl = $BMKZahl -replace("[a-zA-Z]","") $BMKZahlLaenge = $($BMKZahl.Length - 1) $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) $BMKZahl = $PrefixAusgang + $BMKZahl $Ausgaenge += @([PSCustomObject]@{ Name = $BMKZahl Zeile = $i }) } else { Write-Host "Achtung, Fehler bei " $BMKZahl $Kommentar $BMKZahlLaenge = $($BMKZahl.Length - 1) $BMKZahl = $BMKZahl.Substring(0,$BMKZahlLaenge) + "." + $BMKZahl.Substring($BMKZahlLaenge) $Fehler += @([PSCustomObject]@{ Name = $BMKZahl Zeile = $i }) } #Write-Host "In Excel schreiben: BMKZahl: " $BMKZahl " Kommentar: " $Kommentar $Blatt.Cells.Item($i,1) = $Kommentar #Name $Blatt.Cells.Item($i,2) = "Standard-Variablentabelle" #Path $Blatt.Cells.Item($i,3) = "Bool" #Data Type $Blatt.Cells.Item($i,4) = $BMKZahl #Logical Address #$Blatt.Cells.Item($i,5) = "" #Comment $Blatt.Cells.Item($i,6) = "'True" #Hmi Visible $Blatt.Cells.Item($i,7) = "'True" #Hmi Accessible $Blatt.Cells.Item($i,8) = "'True" #Hmi Writeable #$Blatt.Cells.Item($i,9) = "" #Typeobject ID #$Blatt.Cells.Item($i,10) = "" #Version ID $i++ DateiBeschreibenAktualisieren } $Mappe.Save() $Datei.Quit() $GleicheEingaenge = GleicheFinden $Eingaenge $GleicheAusgaenge = GleicheFinden $Ausgaenge Write-Host "Gleiche fuer " $PrefixEingang ": " $GleicheEingaenge Write-Host "Gleiche fuer " $PrefixAusgang ": " $GleicheAusgaenge Write-Host "Fehler bei: " $Fehler if ( $($Fehler.Length -eq 0)) { $Fehler += @([PSCustomObject]@{ Name = "Keine" Zeile = "Alle" }) } return $GleicheEingaenge, $GleicheAusgaenge, $Fehler } 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