$injectpoint = %{ [Regex]::Matches($file, "DMG>D8>$dob.+?REF>EA>$mrn") } | %{ $_.Value }

        foreach ($data in $injectpoint)
        {
            $file = Get-Content C:\utils\foo\0000000.txt
            inject $file $eth $race $lang $data $dob 
        }
    }
}

function inject($file, $eth, $race, $lang, $injectpoint, $dob)
{
    Set-Location C:\utils\boo\
    $injector = "$race" + ":" + $eth + ":" + $lang
    $newString = $data -replace "DMG>D8>$dob", "DMG>D8>$dob>$injector"
    $file.Replace($data, $newString) | Set-Content C:\utils\foo\testfile.txt
}

Mi proceso de pensamiento es que debido a que mi bucle vuelve a leer el archivo en la memoria al comienzo del bucle, tendrá los nuevos cambios leídos en la memoria, donde luego podrá establecer nuevo contenido sin eliminar los cambios que hizo mi bucle en su memoria. iteración previa

He intentado cambiar el lugar donde se lee el archivo en la memoria (fuera del bucle, dentro de la función de inyección), pero la iteración actual es lo más lejos que pude ver donde puedo ver la última inyección de mi script, todos los demás se sobrescriben.

0
Bridger 27 feb. 2020 a las 22:01

2 respuestas

La mejor respuesta

El problema aquí es durante la iteración de tu ciclo, estás leyendo el archivo 0000000.txt y guardando los cambios en testfile.txt. Como nunca lees testfile.txt después de los reemplazos de cadena, no ves las cadenas actualizadas.

1
AdminOfThings 27 feb. 2020 a las 20:51

Si lo entiendo bien, desea agregar nuevo contenido al archivo C:\utils\foo\testfile.txt , para esto debe usar el cmdlet Add-Content

0
Vad 27 feb. 2020 a las 19:37