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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 247021
Url: https://administrator.de/forum/powershell-replace-247021.html
Ausgedruckt am: 06.04.2025 um 21:04 Uhr
5 Kommentare
Neuester Kommentar
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