Чтобы дополнить полезный ответ Яквахолика справочной информацией:
Без кавычек Использование {...}
имеет особое значение в PowerShell : оно создает блок сценария (блок сценария), который представляет собой повторно используемый фрагмент кода PowerShell, который можно передать в качестве аргумента или сохранить в переменной для последующего выполнения по требованию.
Следовательно, для передачи аргументов со встроенными {
или }
символами, кавычка их (с '...'
(буквенная строка, например, '{foo}'
) или "..."
(расширяемая строка, например "{$foo}"
), при необходимости).
Поведение, которое PowerShell проявляет в Windows PowerShell v5.1 / PowerShell Core 6.1.0 с без кавычек {...}
- это известная проблема :
Блок сценария не имеет значения вне PowerShell, например, при передаче аргументов во внешнюю программу, такую как svn
.
Напротив, вызывая собственный CLI PowerShell - powershell.exe
(WindowsPowerShell), pwsh
(PowerShell Core) - с блоком сценариев поддерживается , с помощью скрытого Base64-кодирования содержимого блока сценария, с кодированной строкой, передаваемой через -encodedCommand
, иСериализация CLIXML применяется к аргументам и конвейерному вводу - см. этот комментарий к GitHub
Этот механизм в настоящее время - бессмысленно - применяется и к другим внешним программам, поэтому вы видели аргумент -encodedCommand
появляются.