Kann ich in PowerShell einen mehrzeiligen String an svn übergeben?

Kann ich in PowerShell einen mehrzeiligen String an svn übergeben?

Ich habe die folgende Zeile in einem Skript:

svn propset svn:externals $newExternals $path

Jetzt kommt zum ersten Mal $newExternalsein mehrzeiliger String (es gibt mehrere svn:externalEigenschaften) und svner bellt mich auf eine Art an, die den Anschein erweckt, als könne er mit dem Argument nicht umgehen.

Kann ich einem Programm, das ich in PowerShell aufrufe, keine mehrzeilige Zeichenfolge übergeben?Oder liegt das daran, dass ich svndas nicht analysieren kann? Oder brauche ich Anführungszeichen? (Hat nicht geholfen, aber vielleicht habe ich etwas anderes vermasselt.)


Wenn dies nicht funktioniert, svnwird auch eine Datei akzeptiert, aus der das Material gelesen werden kann:

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

Dies scheint jedoch fehlzuschlagen, da svnerwartet wird externals.txt, dass es sich um eine ASCII-Datei handelt (oder UTF-8, ich bin nicht sicher, aber ich glaube nicht, dass das hier relevant ist), während PowerShell standardmäßig UTF-16 schreibt. Was ist also die kanonische Methode, etwas in eine ASCII-Datei umzuleiten?


Eine Nebenfrage: Was ist die übliche Methode, um einen Pfad zum Erstellen einer temporären Datei zu erhalten?

Antwort1

[io.path]::GetTempFileName() gibt einen temporären Dateinamen (einschließlich Pfad) zurück.

Antwort2

Ich bin nicht so vertraut mit svn, also entschuldigen Sie, wenn das Folgende nicht relevant ist … aber Sie können sicherlich mehrzeilige Zeichenfolgen an Powershell oder ein von Powershell aufgerufenes Programm übergeben (vorausgesetzt, das aufgerufene Programm unterstützt dies).

Hier ist eine Möglichkeit, die mir besonders gut gefällt, aus Technet Windows Powershell Tipp der Woche. (Powershell „Here-Strings“).

Und hier noch eine, aus einer SO-Antwort, obwohl ich keine Ahnung habe, ob dies mit einem aufgerufenen Programm funktioniert … nur, dass es nativ in PowerShell funktioniert.

Schließlich können Zeichenfolgen (in allen Varianten) auch über eine einzelne Zeile hinausgehen:

'Foo
bar'

Wenn keine der Techniken funktioniert, würde ich sagen, dass Sie an eine Einschränkung gestoßen sind svn.

Antwort3

Unter Windows kann der temporäre Ordner des Benutzers mithilfe der Systemvariable TEMP oder TMP gefunden werden.

[Batch]
echo %TEMP%
echo %TMP%

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

verwandte Informationen