将variables在PowerShell中的parameter passing给本机应用程序

以下是我的部署自动化脚本的一部分:

$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 $SVNCommandvariables,但是svn.exe会抛出一个错误: svn.exe : Unknown subcommand: 'export -r 2384 --force'
据我可以看到variables扩展工作,所以我不明白为什么svn.exe引发这个错误。

Unknown subcommand: 'export -r 2384 --force'错误Unknown subcommand: 'export -r 2384 --force'表明调用操作符将'export -r 2384 --force''export -r 2384 --force'看作是一个单独的参数( 来自technet上的&call操作符 ):

当外部命令有很多参数或者参数或path中有空格时,事情会变得棘手! 有了空格,你必须嵌套引号,结果并不总是清楚!

在你的情况下,你可以做一些像这个页面上的build议:

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

并调用所有这样的参数:

 &"$SVNEXE" $SVNCommand 

我得到它的唯一方法是将每个参数保存在一个单独的variables中:

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

这看起来实际上是bug 执行需要引号和variables的命令实际上是不可能的