fragen stichworte

Argumente mit Variablen in PowerShell an die native Anwendung übergeben

Hier ist ein Teil meines Implementierungsautomationsskripts:

$SVNEXE = "$env:ProgramFiles\TortoiseSVN\bin\svn.exe"
foreach ($element in $commandstoken) {
#$exportfile = [System.Web.HttpUtility]::UrlPathDecode($StreamServe5RepoURI + $commandstoken[$a])
$exportfile = ($StreamServe5RepoURI + $commandstoken[$a])
$SVNRevision = $commandstoken[$a+1]
[string]$SVNCommand = "export -r $SVNRevision --force"
Write-Host -ForegroundColor Red $SVNCommand
Write-Host -ForegroundColor Red $SVNCommand $exportfile
&"$SVNEXE" $SVNCommand $exportfile "C:\Temp\__foo\export"
$a = $a+2
}

Ich möchte der svn.exe die Variable $SVNCommand übergeben, aber die svn.exe gibt einen Fehler aus: svn.exe : Unknown subcommand: 'export -r 2384 --force'
Soweit ich sehen kann, funktioniert die Variablenerweiterung, so dass ich nicht verstehen kann, warum der svn.exe diesen Fehler auslöst.

antworten

Der Fehler Unknown subcommand: 'export -r 2384 --force' deutet darauf hin, dass der Aufrufoperator 'export -r 2384 --force''export -r 2384 --force' wie ein einzelnes Argument behandelt (von technet auf dem & amp; Aufrufoperator):

Things can get tricky when an external command has a lot of parameters or there are spaces in the arguments or paths! With spaces you have to nest Quotation marks and the result it is not always clear!

In Ihrem Fall könnten Sie so etwas wie auf dieser Seite vorgeschlagen tun:

$SVNcommand = @('export', '-r', $SVNRevieion, "--force", $exportfile, "C:\\Temp\\__foo\\export")

Und rufe mit allen Argumenten auf:

&"$SVNEXE" $SVNCommand

Der einzige Weg, wie ich es zum Laufen gebracht habe, ist, jeden Parameter in einer separaten Variablen zu halten:

$arg1 = 'export', '-r'
$arg2 = $SVNRevision
$arg3 = '--force'
$arg4 = $exportfile
$arg5 = 'C:\\Temp\\__foo\\export\\'
&"$SVNEXE" $arg1 $arg2 $arg3 $arg4 $arg5

Das scheint eigentlich ein Fehler Das Ausführen von Befehlen, die Anführungszeichen und Variablen benötigen, ist praktisch unmöglich