¿Puedo pasar una cadena de varias líneas a svn en PowerShell?

¿Puedo pasar una cadena de varias líneas a svn en PowerShell?

Tengo la siguiente línea en un script:

svn propset svn:externals $newExternals $path

Ahora, por primera vez, $newExternalshay una cadena de varias líneas (hay varias svn:externalpropiedades) y svnme ladra de una manera que parece indicar que no puede manejar el argumento.

¿No puedo pasar una cadena de varias líneas a un programa que invoco en PowerShell?¿O es un problema por svnno poder analizar eso? ¿O necesito cotizaciones? (No ayudó, pero es posible que haya arruinado algo más).


Si esto no funciona, svntambién aceptaría un archivo para leer el material:

svn propset svn:externals -F externals.txt $path

Sin embargo, esto parece fallar porque svnespera externals.txtser un archivo ASCII (o UTF-8, no estoy seguro, pero no creo que sea relevante aquí), mientras que PowerShell escribe de forma predeterminada UTF-16. Entonces, ¿cuál es la forma canónica de canalizar algo en un archivo ASCII?


Como pregunta paralela: ¿Cuál es la forma canónica de obtener una ruta para crear un archivo temporal?

Respuesta1

[io.path]::GetTempFileName() devolverá un nombre de archivo temporal (incluida la ruta)

Respuesta2

No estoy muy familiarizado con svn, así que disculpe si lo siguiente no es relevante... pero ciertamente puede pasar cadenas de varias líneas a Powershell o a un programa invocado por Powershell (suponiendo que el programa invocado lo admita).

Aquí hay una forma de hacerlo que me gusta especialmente, del Consejo de la semana de Technet Windows Powershell. (Powershell 'Here-Strings').

Y aquí hay otro, de una respuesta SO., aunque no tengo idea si esto funcionará con un programa invocado... solo que funciona de forma nativa en PowerShell.

Finalmente, las cadenas (en todas las variedades) también pueden extenderse más allá de una sola línea:

'Foo
bar'

Si ninguna de las técnicas funciona, diría que se ha topado con una limitación de svn.

Respuesta3

En Windows, la carpeta temporal de los usuarios se puede encontrar utilizando la variable del sistema TEMP o TMP.

[Batch]
echo %TEMP%
echo %TMP%

[Powershell]
echo $env.temp
echo $env.tmp

información relacionada