Powershell -replace
Guten Morgen zusammen.
Ich habe eine Datei, aus der Werte ausgelesen werden und in einer Variable gespeichert werden.
Um die Werte nicht direkt in der Datei ändern zu müssen, möchte ich das mit Textboxen machen. Alles klappt soweit, nur leider wird in der Textdatei selbst der Wert nicht ersetzt, die Frage ist warum ?.
Wie man im Code sehen kann, wird beim Start der Wert vom "param100" eingelesen und in der Textbox auch angezeigt.
In der nächsten Textbox soll man die Möglichkeit haben, den Wert zu ändern und mit dem Button "Speichern" wieder zurück in die Textdatei zu schreiben, in dem Fall also der Wert "param100_neu"
Mich wundert, dass er per "Write-Host" die richtigen Werte anzeigt, also alles versteht, aber in der Textdatei selbst den Wert nicht ändert.
Ich habe eine Datei, aus der Werte ausgelesen werden und in einer Variable gespeichert werden.
Um die Werte nicht direkt in der Datei ändern zu müssen, möchte ich das mit Textboxen machen. Alles klappt soweit, nur leider wird in der Textdatei selbst der Wert nicht ersetzt, die Frage ist warum ?.
$path = "E:\Temp\settings_test.ini"
Get-Content $path | ForEach-Object -Begin { $settingsmenu = @{ } } -Process { $store = [regex]::split($_, '='); if (($store.CompareTo("") -ne 0) -and ($store.StartsWith("[") -ne $True) -and ($store[0].StartsWith("#") -ne $True)) { $settingsmenu.Add($store, $store[1]) } }
$param100 = $settingsmenu.Get_Item("Param100")
$FormEvent_Load = {
$pfad_alt.Text = $param100
}
$buttonSpeichern_Click = {
$param100_neu = $pfad_neu.Text
Write-Host $param100
Write-Host $param100_neu
(get-content $path) | foreach-object { $_ -replace $param100, $param100_neu } | set-content $path
}
Wie man im Code sehen kann, wird beim Start der Wert vom "param100" eingelesen und in der Textbox auch angezeigt.
In der nächsten Textbox soll man die Möglichkeit haben, den Wert zu ändern und mit dem Button "Speichern" wieder zurück in die Textdatei zu schreiben, in dem Fall also der Wert "param100_neu"
Mich wundert, dass er per "Write-Host" die richtigen Werte anzeigt, also alles versteht, aber in der Textdatei selbst den Wert nicht ändert.
Please also mark the comments that contributed to the solution of the article
Content-Key: 247021
Url: https://administrator.de/contentid/247021
Printed on: April 27, 2024 at 03:04 o'clock
5 Comments
Latest comment
Moin zusammen,
-replace interpretiert im Eingabestring spezielle Zeichen als Regular Expressions, und da dein Pfad sicherlich Backslashes enthält wird er den alten Pfad in der Textdatei nicht finden, da in Regex ein Backslash gefolgt von Buchstaben eine spezielle Bedeutung hat. Mach es mit der normalen Replace Methode:
Grüße Uwe
-replace interpretiert im Eingabestring spezielle Zeichen als Regular Expressions, und da dein Pfad sicherlich Backslashes enthält wird er den alten Pfad in der Textdatei nicht finden, da in Regex ein Backslash gefolgt von Buchstaben eine spezielle Bedeutung hat. Mach es mit der normalen Replace Methode:
(get-content $path | Out-String).replace($param100, $param100_neu) | set-content $path