1

I need to change a Property file with a PowerShell script.

The line in the property file looks like this:

max.tree.children.threshold="Here is a number which I can't know"

So my script reads the file and finds this line but I can't say that he should overwrite this number because I don't know the number?

Can I set a variable where you don't know what's in there?

ForEach($Datei in Get-ChildItem $test1) {
    # Get-Content liest eine Texdatei Zeile für Zeile ein
    # in der Variablen $Zeilen steht deshalb eine Liste von Zeilen (Array)
    $Zeilen =  Get-Content -Path $Datei.Fullname
    # Die Datei befindet sich nun Komplett im Speicher (in der Variablen $Zeilen)
    # deshalb können wir die Datei überschreiben

    # Zeilen Zähler, wird nur gebraucht um die erste Zeile zu erkennen
    $ZeilenZähler = 1

    # jede Zeile abarbeiten
    foreach($Zeile in $Zeilen)
    {
        # Hier findet meine Dateiveränderung statt.
        # Beispiel: Alle Buchstaben 'a' durch den Buchstaben 'o' ersetzen
        $Zeile = $Zeile -replace "max.tree.children.threshold="Dont know whats here!"","max.tree.children.threshold=300"

        #Veränderte Zeile anzeigen lassen
        Write-Host "Geänderte Zeile in Datei $($Datei.Fullname)"
        Write-Host $Zeile

        # Nur bei der ersten Zeile wird die Alte Datei ("leer") neu angelegt (überschrieben)!
        If($ZeilenZähler -eq 1 ) {
           Out-File -FilePath $Datei.Fullname -InputObject $Zeile -Force
        }
        Else {
            # jede weitere Zeile an die neue erstellte Datei anhängen (Parameter Append)
            Out-File -FilePath $Datei.Fullname -InputObject $Zeile -Force -Append
        }

        # Zeilenzähler hochsetzen
        $ZeilenZähler++
    }
}
Manu
  • 1,685
  • 11
  • 27

2 Answers2

0

You can easily do this using regular expressions:

...
$file =  $Datei.Fullname
(Get-Content $file) -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300" | Set-Content $file
...

We are first reading the content of the file and replacing everything that matches max.tree.children.threshold=\d+ (the \d+ will match the rest of the line as long as it digits) with max.tree.children.threshold=300.

Megabeets
  • 1,378
  • 11
  • 19
0

To specifically check for digits, you can check a number using \d+ which means one or more digits in regular expressions

$Zeile = $Zeile -replace "max.tree.children.threshold=\d+","max.tree.children.threshold=300"
Manu
  • 1,685
  • 11
  • 27