Ich habe ein vorhandenes Skript, das eine Quelldatei einliest und bestimmte Zeichen durch neue ersetzt. Es ist also ziemlich hart codiert.Powershell - CSV als Nachschlagevorgang für den Ersetzungsvorgang verwenden
(Get-Content $path\$xml_out) | Foreach-Object {$_ -replace '<ContactCode>PROP</ContactCode>','<ContactCode>OFFICE</ContactCode>'} | set-content $path\$xml_out
Was würde ich tun möchte, sind Speicher alte und neue Werte in einer CSV-Datei (nur 2 Spalten), so dass Benutzer können Ad-hoc-Änderungen vornehmen. So sieht meine CSV so aus
ORGIGINAL_CODE,NEW_CODE
CAREHOME,OFFICE
PROP,EMERG
MAIN,OFFICE
DAY,OFFICE
TELE,TEL
BUSINESS,OFFICE
Und das ist die Originaldatei, die ich ersetze auf.
Ich benutze import-csv aber versuche eine ForEach-Schleife mit einem Get-Content darin zu verwenden.
$testcsv = import-csv $path\mapping.csv
ForEach ($row in $testcsv)
{
$field1 = $row.ORGIGINAL_CODE
$field2 = $row.NEW_CODE
Echo "$field1 maps to $field2"
echo "$xml_out"
(Get-Content $path\$xml_out) | Foreach-Object {$_ -replace '$field1','$field2'} | set-content $path\$xml_out
}
Also anstatt sie zu ersetzen field1 mit field2 in der Quelldatei es nur meinen Code setzt
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
Ich habe gehofft, mit am Ende
OFFICE
EMERG
OFFICE
OFFICE
TEL
OFFICE
Ich vermute, dass ich bin nicht richtig entkommen.
Bitte teilen Sie uns die "Beschwerde", die Sie erwähnt haben, wörtlich mit. Bitte stellen Sie auch ein [mcve] bereit, da viele der Variablen in Ihrem Code oben nicht sichtbar sind ('$ CSV',' $ path', etc.). – gravity
Ich bemerke, dass Sie in Ihrer ursprünglichen Bearbeitung einen Skriptblock innerhalb Ihrer 'ForEach'-Schleife verschachtelt haben, was die Ausgabe ergibt, die Sie sehen. 'Foreach-Objekt {{$ _ -replace '$ field1', '$ field2'}}'. Das ist meine Vermutung für die Ursache Ihres Problems - es hat nur den Skriptblock mit Set-Content in die Datei geschrieben. Jetzt haben Sie diesen Fehler in Ihrer Bearbeitung korrigiert, ich wette, Ihr Code wird das gleiche Problem nicht mehr geben ...?. – TessellatingHeckler