
ZippiScrippi
-
Gesamte Inhalte
3 -
Registriert seit
-
Letzter Besuch
Beiträge erstellt von ZippiScrippi
-
-
Hi mwiederkehr,
das hat geholfen. Vielen Dank.
Ich habe leider noch ein Problem, die eingelesene und nun erfolgreich bearbeitete xml, soll am Ende wieder in eine Datei geschrieben werden.
Sollte so möglich sein:
$xmlData=[xml](Get-Content -Path $TestConfigBak -Encoding UTF8) $xmlData.Save($TestConfigTest)
Allerdings wird diese dann, so auch in der Console beim Testen, in einem String, also alles hintereinander und ohne xml Formatierung ausgegeben.
Hast Du oder jemand anderes ggf. noch einen Tipp für mich?
Vorab vielen Dank für Deine/Eure Hilfe.----------------------------------------------------
Hi Leute,
sorry, nehme ich zurück.
Die Datei wird korrekt geschrieben.
Habt alle eine coole coding Zeit und nochmal Danke an mwiederkehr - hast mein WE gerettet...-
1
-
-
Hi Leute,
ich verzweifle gerade an einem xml File.
Es soll mittels Powershell mit einem neuen Eintrag erweitert werden.
Die Struktur sieht folgendermaßen aus:
<userSettings> <Test.Properties.Settings> <setting name="FileParameter" serializeAs="String"> <value>Test</value> </setting> <setting name="AppsToStart" serializeAs="Xml"> <value> <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string>C:\Test.exe</string> </ArrayOfString> </value> </setting> </Test.Properties.Settings> </userSettings>
Die Erweiterung sieht vor, dass eine weitere App unter "setting name=AppsToStart" eingetragen werden soll.Um das "einzuleiten" wird die xml eingelesen, folgend ein neues Element mit Create.Element erstellt - ok so far.
Aber wie bekomme ich das nun genau auf die Position?
Soll dann so aussehen:<setting name="AppsToStart" serializeAs="Xml"> <value> <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string>C:\Test.exe</string> <string>C:\Test_II.exe</string> </ArrayOfString> </value> </setting>
Es bedarf ja eigentlich nur wenige Zeilen code...
$xmlData=[xml](Get-Content -Path $xmlPath -Encoding UTF8) $NewEntry="C:\Test_II.exe" $NewElement=$xmlData.CreateElement("string") $NewElement.InnerText=$NewEntry $targetElement=$xmlData.SelectSingleNode("//userSettings//Test.Properties.Settings//setting[@name='AppsToStart']") $targetElement.AppendChild($NewElement) | Out-Null
Ist wohl dicht dran, passt aber noch nicht, weil der Eintrag hinter dem /ArrayOfString und sogar hinter /value eingetragen wird...
Was muss ich anders machen, damit der Eintrag an der richtigen Stelle auftaucht?
Vorab vielen Dank für Eure Hilfe.
Grüße, ZippiScrippi
Powershell: XML-Datei erweitern
in Windows Forum — Scripting
Geschrieben · bearbeitet von ZippiScrippi
Hi Leute,
ich habe noch eine weitere Abfrage, bei der eine Änderung durchgeführt werden soll.
Das funktioniert auch alles. Aber nun habe ich das Problem, dass die Ausgabedatei entweder wieder wie ein String formatiert ist - alles hintereinander,
oder nur Teildaten drin stehen.
Das mit dem Hintereinander ist ungünstig, auch dann, wenn es dennoch funktioniert. Andere müssen diese wiedererkennen können...
Code - der dazu führt, dass die Ausgabedatei unvollständig ist:
$xmlData=[xml](Get-Content -Path $TraceConfigBak -Encoding UTF8) $targetElement=$xmlData.SelectSingleNode("//setting[@name='PlatformNcrLogFiles']") $targetElement.InnerText='C:\Temp\$TODAY$\*.*' $xmlData | Out-File $TraceConfig -Encoding utf8
Gibt dann in der Datei folgendes aus:
xml configuration --- ------------- version="1.0" encoding="utf-8" configuration
Da das zu wenig ist, habe ich folgende Anweisung verwendet:
$xmlData.InnerXml | Out-File $TraceConfig -Encoding utf8
Damit wird die Datei mit allem gewünschten Inhalt erzeugt.
Aber eben hintereinander.
Muss ich, um die erste Lösung verwenden zu können, noch irgendwas aktualisieren?
Danke vorab für Eure Hilfe.
Ok, ich habe es.
Wenn ich wie folgt speichere, wird die Datei mit dem Umbruch erzeugt:
$xmlData.Save($Test)
Zwar kann man so nicht speziell UTF8 formatieren, die Datei wird aber dennoch in UTF8 erstellt.