Hallo zusammen,
ich habe mir ein kleines Powershell Skript geschrieben mit dem ich eine XML Datei grafisch editieren kann. Für jeden Eintrag der in der XML Datei geändert werden soll gibt es ein Textfeld das den bisherigen Wert enthält, beim Klicken auf den Speichern Button wird dann der geänderte Wert zurückgeschrieben.
Das Ganze sieht dann etwa so aus:
SWRepository = $XMLFile.Installer.Resources.Repository.Trim() $label2 = New-Object Windows.Forms.Label $label2.text = "Path to your Software Repository" $text2 = New-Object Windows.Forms.TextBox $text2.Location = New-Object Drawing.Point 200,90 $text2.Size = New-Object Drawing.Point 200,30 $text2.Text = $SWRepository ... $button.add_click({ $XMLFile.Installer.Resources.Repository = $text2.text $XMLFile.Save(((Get-Item $PSScriptRoot).FullName) + "\Variable.xml") })
Da die XML Datei allerdings wächst (und damit auch der Bedarf einzelne Werte zu ändern) möchte ich meine GUI nicht jedes mal mühselig neu aufbauen und einzelne Textfelder verschieben, sondern habe das in eine Schleife ausgelagert. Für jeden Wert aus der XML Datei unterscheiden sich die einzelnen Zeilen meiner GUI eigentlich nur in drei Werten (Titel, Beschreibung, Pfad innerhalb der XML Datei). Ich habe daher einen verschachtelten Array gebaut in dem ich diese drei Werte angebe, eine Schleife baut mir dann die GUI zusammen. Der Code dazu sieht so aus:
$Important += @( ,($XMLFile.Installer.Resources.Repository,"Path to your Software Repository","Path that contains the VHD repository","text")) foreach ($element in $Important) { $label = New-Object Windows.Forms.Label $label.text = $element[1] $element[3] = New-Object Windows.Forms.TextBox $element[3].Location = New-Object Drawing.Point 200,$p $element[3].Size = New-Object Drawing.Point 200,30 $element[3].Text = $element[0] $form.controls.add($label) $form.controls.add($element[3]) }
Soweit funktioniert alles ganz wunderbar, allerdings brauche ich eine zweite Schleife die das Speichern übernimmt (beim Klick auf den Speichern Button). Da ich ursprünglich einen einzelnen Eintrag für jeden Wert der XML Datei hatte, konnte ich den explizit ansprechen und geänderte Texte eintragen, jetzt muss ich aber innerhalb der Schleife das Objekt aus meinem Array verwenden. Ich habe das hier probiert:
$button.add_click({ foreach ($element in $Important) { $element[0] = $element[3].text } $XMLFile.Save(((Get-Item $PSScriptRoot).FullName) + "\Variable.xml") })
Damit ändere ich aber den Wert von "$element[0]", schreibe also statt meinem Objekt das auf einen XML Wert verweist einen simplen String hinein. Logischerweise wird dann auch nichts in meiner XML Datei geschrieben.
Habt ihr einen Tipp für mich, wie ich meinen geänderten Text in die XML Datei bekomme indem ich den Inhalt von "$element[0]" verwende, statt die Zelle zu überschreiben?
Vielen Dank für Eure Hilfe
Joh