Свойство Msbuild не учитывается при передаче параметра командной строки через powershell

Я пытаюсь передать свойство через параметр командной строки ($args[0]) следующим образом, используя Powershell, но это не рассматривается.

if ( Test-path -path $args[0]) {
            &"$MsbuildBinPath\Msbuild.exe" $MSBuildFile  /t:BuildAll "/p:AllComponents=$args[0]"  $Logger $ErrorLogger
            if ($LastExitCode -ne 0) {
                    Write-Host "It failed, send a mail"
            }
    }

Если я передаю свойство следующим образом, оно рассматривается.

"/p:AllComponents=List.txt" 

Почему аргументы командной строки не учитываются при непосредственном применении?

Я могу сохранить значение командной строки в некоторой переменной и передать, но есть ли другой механизм, чтобы передать его напрямую?

1 ответ

Решение

$args[0] не раскрывается внутри строк, его нужно заключить в нотацию подвыражения:

... "/p:AllComponents=$($args[0])"

Чтобы избежать этого синтаксиса, присвойте аргумент переменной и вставьте переменную в строку:

$argsZero= $args[0]
... "/p:AllComponents=$argsZero"

Для получения дополнительной информации введите в своей консоли следующее:

Get-Help about_Quoting_Rules
Другие вопросы по тегам