Jump to content

PowerShell Bearbeitung richtig Speichern


Direkt zur Lösung Gelöst von Proll012,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

vor 5 Minuten schrieb Proll012:

versteh ich jetzt doch schon deutlich mehr. :))

 

Ich fürchte, da machst Du Dir ein bissl was vor. ;-) Es gibt in PowerShell verschiedene Ansätze, wie man Schleifen realisieren kann. Einmal die  Pipe-Methode und dann die "Klassische" Schleifen-Methode. Schau Dir mal die Beispiele in den Dokus an, die ich oben verlinkt hatte. Die Dateinamen sollten dann in der Schleifenvariablen stecken, damit Du in jedem Schleifendurchlauf genau eine Datei beackerst.

Link zu diesem Kommentar
Am 5.10.2021 um 15:36 schrieb BOfH_666:

das komplette Skript.  ;-) 

Gesagt, getan. 

$quellpfad ="C:\Users\MeinName\Desktop\XmlFutterTest"
$XmlData = get-ChildItem $quellpfad "=.xml" -Recurse
foreach ($xmlobject in $XmlData) {
[xml]$xml = get-content $xmlobject.Fullname
foreach ($Feature in ($xmlobject.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES).FEATURE ) {
if ($Feature.FVALUE -match ";") {
    $SplittedFVALUE = ($Feature.FVALUE -split ';').trim()    
    foreach ($Value in $SplittedFVALUE) {                  
        $child = $xmlobject.CreateNode("element", "FVALUE", " ")       
        $child.InnerText = $Value      
        $Feature.AppendChild($child)
        } 
         }
        $ItemToRemove = $Feature.SelectSingleNode('FVALUE')
        $Feature.RemoveChild($ItemToRemove)
         }
$xml.Save($xmlobject.Fullname)
}

Holzweg? Formfehler? :lool: zumindest bekomme ich keinen Fehler angezeigt. Passieren tut aber auch nichts :/

bearbeitet von Proll012
Link zu diesem Kommentar

Ich würde Dir empfehlen, Deinen Code so explizit wie irgend möglich zu schreiben, keine Parameternamen wegzulassen, keine Aliase zu benutzen und so weiter. Das sollte Dir helfen, Deinen eigenen Code zu verstehen. Auch solltest Du, wenn Dein Code nicht das tut, was Du Dir erhoffst, selbst versuchen herauszufinden, warum das nicht so ist. Wenn Du Variablen erzeugst und füllst, lass Dir den Inhalt der Variablen einfach auf der Konsole ausgeben, das sollte Dich schon viel weiter bringen. Und die Methoden aus den Links, die ich Dir in dem anderen Thread gepostet hatte, machen dann den Rest.

 

vor 4 Stunden schrieb Proll012:

Holzweg? Formfehler?

 

Wenn das nicht ein Fehler ist, der beim hier reinkopieren passiert ist, suchst Du in Deiner zweiten Code-Zeile nach einer (1) ganz bestimmten XML-Datei ("=.xml") und weist das Ergebnis einer  Variablen zu. Eine Schleife über ein einzelnes Element, gibt im besten Fall einfach dieses eine Element wieder aus. ;-) 

 

In Deiner 4. Code-Zeile liest Du den Inhalt der Datei aus und speicherst ihn als XML-Objekt in der Variablen $xml. In der nächsten Zeile versuchst Du auf das XML-Object zuzugreifen, benutzt aber die falsche Variable - nämlich $xmlobject anstatt $xml.

 

vor 4 Stunden schrieb Proll012:

zumindest bekomme ich keinen Fehler angezeigt.

 

... was ja nicht heißt, dass der Code fehlerfrei wäre ... :aha2:

 

vor 4 Stunden schrieb Proll012:

Passieren tut aber auch nichts

 

 ... kann ja auch nicht. Schau Dir doch bitte nochmal an, wie man ein PowerShell-Skript debugged!

 

Link zu diesem Kommentar
  • Beste Lösung

Nicee danke dir, 

 

$quellpfad ="C:\Users\MeinName\Desktop\Experiment,Test"
$XmlData = get-ChildItem $quellpfad "*.xml" -Recurse
foreach ($xmlobject in $XmlData) {
[xml]$xml = get-content $xmlobject.Fullname
foreach ($Feature in ($xml.BMECAT.T_NEW_CATALOG.PRODUCT.PRODUCT_FEATURES).FEATURE ) {
if ($Feature.FVALUE -match ";") {
    $SplittedFVALUE = ($Feature.FVALUE -split ';').trim()
    foreach ($Value in $SplittedFVALUE) {                   
        $child = $xml.CreateNode("element", "FVALUE", " ")        
        $child.InnerText = $Value      
        $Feature.AppendChild($child)
        }   
        $ItemToRemove = $Feature.SelectSingleNode('FVALUE')
        $Feature.RemoveChild($ItemToRemove)
         }
       } 
$xml.Save($xmlobject.Fullname)
}

So funktionierts :)))))))) bis jetzt. 

bearbeitet von Proll012
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...