2016-04-21 2 views
0

So habe ich vor kurzem gefunden, die Notwendigkeit zu finden und zu ersetzen, mehrere Elemente innerhalb eines XML-Dokuments. Momentan habe ich den unten stehenden Code gefunden, der es mir ermöglicht, mehrere Suchen und Ersetzen durchzuführen, aber diese sind in der Powershell fest codiert.Suchen und Ersetzen vieler Elemente mit Powershell aus Daten in einer CSV, XLS oder zwei TXT-Dokumente

(get-content c:\temp\report2.xml) | foreach-object {$_ -replace "192.168.1.1", "Server1"} | foreach-object {$_ -replace "192.168.1.20", "RandomServername"} | set-content c:\temp\report3.xml 

Im Idealfall statt harten den Wert Codierung ich aus einer Liste finden möchte und ersetzen, idealerweise in einem CSV oder XLSX und. Vielleicht wären zwei txt-Dateien einfacher.

Wenn es von einer CSV war, konnte es den Wert finden, um von A1 und den Wert zu finden, um es mit B1 zu ersetzen und weiter unten zu schleifen, bis die Werte leer sind.

Ich verstehe, ich müsste den Get-Content verwenden und für jeden Befehl habe ich mich nur gefragt, ob das möglich ist und wie es geht/wenn mir jemand helfen könnte.

Vielen Dank im Voraus.

SG

Antwort

0
#next line is to clear output file 
$null > c:\temp\report3.xml 
$replacers = Import-Csv c:\temp\replaceSource.csv 
gc c:\temp\aip.xml | ForEach-Object { 
    $output = $_ 
    foreach ($r in $replacers) { 
     $output = $output -replace $r.ReplaceWhat, $r.ReplaceTo 
    } 
    #the output has to be appended, not to rewrite everything 
    return $output | Out-File c:\temp\report3.xml -Append 
} 

Inhalt von replaceSource.csv wie folgt aussieht:

ReplaceWhat,ReplaceTo 
192.168.1.1,server1 
192.168.1.20,SERVER2 

Beachten Sie die Header

+0

Hallo, auf der Oberfläche dieses, wirklich gut Stück Code sieht gut aus, in der Prüfung aber ich scheint damit zu kämpfen. Ich habe Ihren Code leicht bearbeitet, um ihn an einen XML-Code zu senden. $ replacers = Importieren-Csv c: \ temp \ ersetzenSource.csv gc c: \ temp \ aip.xml | ForEach-Object { foreach ($ r in $ ersetzern) { $ output = $ _ -replace $ r.ReplaceWhat, $ r.ReplaceTo } return $ output | Out-File c: \ temp \ report3.xml } Die Sache ist es ändert nur die letzte auf der CSV, es funktioniert aber nur für die letzte Zelle, fragte sich, ob Sie wüssten, warum das war. Danke und tolle Arbeit! :) – user3290171