Используя EchoArgs.exe из PowerShell Community Extensions , мы можем видеть, какие аргументы получает hg.exe:
PS> & ./EchoArgs.exe clone $SourceRepo $Repo $revstring
Arg 0 is <clone>
Arg 1 is <C:\inetpub\wwwroot\Spyda\>
Arg 2 is <C:\inetpub\wwwroot\BranchClone\>
Arg 3 is <--rev default --rev case>
Arg 4 is <1234>
Что происходит, когда powershell разрешает вызов нативномуприложение, поэтому оно автоматически использует кавычки для экранирования переменных аргументов, содержащих пробелы, такие как $revstring
.
Вместо предварительного цитирования наших аргументов мы можем воспользоваться этим экранированием, просто создав массив различныхзначения, которые мы хотим использовать:
PS> $hgArgs = @('clone',$SourceRepo,$Repo,'--rev','default','--rev','case 1234')
PS> & ./EchoArgs.exe $hgArgs
Arg 0 is <clone>
Arg 1 is <C:\inetpub\wwwroot\Spyda\>
Arg 2 is <C:\inetpub\wwwroot\BranchClone\>
Arg 3 is <--rev>
Arg 4 is <default>
Arg 5 is <--rev>
Arg 6 is <case 1234>