Назад | Перейти на главную страницу

Передача аргументов с переменными в PowerShell в собственное приложение

Вот часть моего сценария автоматизации развертывания:

$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
}

Я хочу передать svn.exe $SVNCommand переменная, но svn.exe выдает ошибку: svn.exe : Unknown subcommand: 'export -r 2384 --force'
Насколько я понимаю, расширение переменных работает, поэтому я не могу понять, почему svn.exe выдает эту ошибку.

Ошибка Unknown subcommand: 'export -r 2384 --force' предполагает, что оператор звонка лечит 'export -r 2384 --force''export -r 2384 --force' это как единственный аргумент (из технет на оператора & call):

Все может стать сложным, когда внешняя команда имеет много параметров или в аргументах или путях есть пробелы! С пробелами нужно вкладывать кавычки, и результат не всегда ясен!

В вашем случае вы можете сделать что-то вроде предложенного на этой странице:

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

И вызовите со всеми такими аргументами:

&"$SVNEXE" $SVNCommand 

Единственный способ заставить его работать - хранить каждый параметр в отдельной переменной:

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

Это действительно ошибка Выполнение команд, требующих кавычек и переменных, практически невозможно.