Ответ Матиаса Р. Джессена объясняет разбор PowerShell ,
разделенных токенов как аргументы [ с тех пор его ответ был удален, но я надеюсь, что он будет восстановлен ], ночто не применимо в данном случае , потому что любые аргументы, передаваемые в CLI PowerShell через -File
, не подлежат синтаксическому анализу командной строки PowerShell - вместо этого такиеаргументы обрабатываются как литералы .
То есть если командная строка, вызванная TeamCity, действительно была следующей:
powershell ... -File C:\...ps1 -a "abra, cadabra"
тогда переменная параметра $a
получит получит значение abra, cadabra
, как и ожидалось.
Другими словами: Что такое на самом деле , передаваемое в вашем случаедолжно быть abra cadabra
, а не
abra, cadabra
, поэтому необходимо изменить значение %TestParam%
, чтобы убедиться, что оно действительно содержит запятую .
Что касается , почему log вызванной команды предполагает, что* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1.] * 1. 1. 1.]]]1055 * Я подозреваю, что TeamCity является лжецом, показывая строки, соединенные запятой, но пропуская их без нее.
Возможно TeamCity, когда ведение журнала вызова командной строки наивно разбивает эту командную строку на токены только пробелами , не учитывая цитирование , а затем представляет их как ,
-разделенный список.
Если это действительно так, то аргумент "abra cadabra"
- без запятой - будет записан как
"abra, cadabra"
, что объясняет путаницу.