Azure Cli обновляет переменную с помощью объекта JSON в сценарии powershell

#azure-devops #azure-pipelines #azure-powershell #azure-cli

#azure-devops #azure-конвейеры #azure-powershell #azure-cli

Вопрос:

Я пытаюсь обновить переменную Azure pipeline group из скрипта PowerShell, используя az cli.

У меня есть команда, обновляющая переменную, но изменяющая json и удаляющая все кавычки («)

поэтому вместо обновления переменной с {"a": "a"} на {"a": "b"}

он обновляет его до {a: b}

Я выполняю следующую команду

 $json = ConvertTo-Json $a -Compress
Write-Host $json
az pipelines variable-group variable update --group-id 236 --name MyJson --detect true --secret false --value $json
 

Выход из write-host

 {"a": "b"}
 

Вывод az pipelines variable-group variable update

 {
 "MyJson": {
   "isSecret": null,
   "value": "{a:b}"
  }
}
 

Что я делаю не так и как я могу заставить его обновляться без изменения JSON?

Ответ №1:

Все переменные хранятся в виде строк и могут изменяться, и это уже означает строку, когда она заключена в двойные кавычки. Таким образом, он удаляет все кавычки внутри. Если вы хотите, чтобы кавычки также сохранялись в качестве значения, тогда вам нужно передать их следующим образом:

 {"a":"b"}
 

Или просто используйте одинарные кавычки:

 '{"a":"b"}'
 

Наконец, это будет выглядеть так:

введите описание изображения здесь

Нет необходимости сохранять двойные кавычки в качестве значения. Поэтому я не рекомендую вам делать это без какой-либо особой причины.

Комментарии:

1. так интересно, что когда вы делаете это с помощью var, введенный var ' ' не работает. Поэтому мне пришлось выполнить замену и заменить все " на " , а затем передать его команде

Ответ №2:

Таким образом, в то время как @charles работает при передаче данных прямо в команду подобным образом, мы используем переменные.

Хотя я понимаю, что здесь происходит, все же думаю, что команда az могла бы справиться с этим лучше.

Итак, чтобы заставить это работать, мне пришлось выполнить замену строки и заменить все " на "

Раздражает, что это нужно сделать, но это работает, поэтому мои окончательные команды выглядят так:

 $new_json = $json.replace("`"", "`"")
az pipelines variable-group variable update --group-id $(VarGroupId) --name var_name --detect true --secret false --value $new_json
 

Комментарии:

1. Почему бы не принять мой ответ вместо добавления другого ответа, когда вы просто копируете решение ?!

2. Строка json должна содержать обратную косую черту, а не просто экранировать json, чтобы вписаться в строку. Ответы разные.