PowerShell XML mit PowerShell erzeugen - Zeilenumbrüche einfügen

Die wilde Inge

Commander
Registriert
Aug. 2009
Beiträge
2.113
Grüße,

ich stelle mich trotz Google irgendwie zu dämlich an einen Zeilenumbruch in mein Powershell Skript einzufügen.

Ich erzeuge mit $xmlcreate eine XML, was alles ganz toll funktioniert, aber in der Ausgabe ist dann der gesamte Code in einer Zeile, was irgendwie Bockmist ist :D

Bezüglich der Formatierung habe ich natürlich was bei Google gefunden, aber ein `t oder `n zerhackt mir meine Elemente, sieht dann so aus
Code:
<struct        > oder
<stuct
>


Es ist vermutlich ganz leicht, aber ich kriege es trotzdem nicht hin.
Jemand einen Tipp für mich?



Originalcode:

Code:
$xmlcreate.WriteStartDocument()

$xmlcreate.WriteStartElement("struct")

    $xmlcreate.WriteStartElement("member")
        
        $xmlcreate.WriteElementString("name","FileType")
                
        $xmlcreate.WriteStartElement("value")
        
            $xmlcreate.WriteElementString("string","IdentityIdentity")
        
        $xmlcreate.WriteEndElement()
        
    $xmlcreate.WriteEndElement()
            
$xmlcreate.WriteEndElement()

$xmlcreate.WriteEndDocument()
 
Ahoi,
erstmal herzlichen Dank, ich muss aber gestehen, dass ich es trotz dieser Anleitungen (die ich selber schon offen hatte) eben nicht hinkriege :heul:
Das Ding ist, dass die meisten Anleitungen hier aus ganz anderen Sprachen kommen, also z.B. C oder Java und eben nicht PowerShell, daher vermute ich, dass die Befehle für den Zeilenumbruch nicht überall gleich sind.

In einer Anleitung zu xmlcreate hieß es, man soll noch reinschreiben:

$xmlcreate.Formatting = Indented
$xmlcreate.Identation = 1
$xmlcreate.IdentChar = "`t"

Ich habe nur kA was das bringen soll, abgesehen davon, dass ich ne Fehlermeldung bei der ausführung kriege.

Code:
Indented : Die Benennung "Indented" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und 
wiederholen Sie den Vorgang.
In C:\Users\x\Desktop\ps2.ps1:3 Zeichen:25
+ $xmlcreate.Formatting = Indented
+                         ~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Indented:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 
Die Eigenschaft "Identation" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass die Eigenschaft vorhanden ist und festgelegt werden kann.
In C:\Users\x\Desktop\ps2.ps1:4 Zeichen:1
+ $xmlcreate.Identation = 1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException
 
Die Eigenschaft "IdentChar" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass die Eigenschaft vorhanden ist und festgelegt werden kann.
In C:\Users\x\Desktop\ps2.ps1:5 Zeichen:1
+ $xmlcreate.IdentChar = "`v"
 
https://riptutorial.com/powershell/example/17733/creating-an-xml-document-using-xmlwriter--
Code:
# https://riptutorial.com/powershell/example/17733/creating-an-xml-document-using-xmlwriter--
function writeXml( [string]$filename, [Xml.XmlWriterSettings]$settings )
{
    # Set the File Name Create The Document
    $xmlWriter = [System.XML.XmlWriter]::Create( $filename, $settings )

    # Write the XML Decleration and set the XSL
    $xmlWriter.WriteStartDocument()
    $xmlWriter.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='style.xsl'")

    # Start the Root Element
    $xmlWriter.WriteStartElement("Root")
   
        $xmlWriter.WriteStartElement("Object") # <-- Start <Object>

            $xmlWriter.WriteElementString("Property1","Value 1")
            $xmlWriter.WriteElementString("Property2","Value 2")

            $xmlWriter.WriteStartElement("SubObject") # <-- Start <SubObject>
                $xmlWriter.WriteElementString("Property3","Value 3")
            $xmlWriter.WriteEndElement() # <-- End <SubObject>

        $xmlWriter.WriteEndElement() # <-- End <Object>

    $xmlWriter.WriteEndElement() # <-- End <Root>

    # End, Finalize and close the XML Document
    $xmlWriter.WriteEndDocument()
    $xmlWriter.Flush()
    $xmlWriter.Close()
}


$raw = New-Object System.Xml.XmlWriterSettings

$pretty = New-Object System.Xml.XmlWriterSettings
$pretty.Indent = $true
$pretty.IndentChars = "    "

writeXml (Join-Path (Resolve-Path .) "1.xml") $raw
writeXml (Join-Path (Resolve-Path .) "2.xml") $pretty
1.xml ohne Indent, 2.xml mit.

Die wilde Inge schrieb:
Das Ding ist, dass die meisten Anleitungen hier aus ganz anderen Sprachen kommen, also z.B. C oder Java und eben nicht PowerShell, daher vermute ich, dass die Befehle für den Zeilenumbruch nicht überall gleich sind.
PowerShell arbeitet mit der kompletten .NET API im Hintergrund. Deine Anlaufstelle ist also Microsoft und das MSDN und nicht C oder Java. Wenn du Beispiele für C# oder VB.NET findest, kannst du die auch ganz einfach in PowerShell adaptieren - läuft ja .NET im Hintergrund.
 
Dankeschön!
Jetzt klappts, da haben mir neben den .settings noch ein paar andere Sachen gefehlt.
TOP!
 
Zurück
Oben