#powershell #api #rest
#powershell #API #rest
Вопрос:
Я пытаюсь создать скрипт, который обновляет определенное поле, расположенное глубоко в структуре API (XML). Я дошел до получения значения для этого конкретного узла следующим образом:
$ProdData = Invoke-Restmethod -Uri $ProdUrl -Method Get -Headers $headers -UseBasicParsing
$ProdAttributes = $ProdData.list | Select-Xml -Xpath "//resource/attributes"
$SelectXML = $ProdAttributes | Select-Xml -XPath "//attribute[@name='required-parameters']"
$SelectItem = $SelectXML | Select-Xml -XPath "//parameters/parameter[@name='modelInputParameters']"
Значение, которое я хочу перезаписать, — это $SelectItem.Node.value со значением $ NewModelInput, но я не совсем уверен, как это сделать.
Структура выглядит примерно так:
<resource>
<attributes>
<attribute name="required-parameters">
<parameters>
<parameter step="persist_imported_data_strings_hidden" name="modelInputParameters" value="{'info':'3','horlgto':'0','horlgtb':'700'}" committed="false"/>
</parameters>
</attribute>
</attributes>
</resource>
Спасибо за помощь!
Ответ №1:
Вместо использования $SelectItem = $SelectXML | Select-Xml
я бы предложил использовать SelectSingleNode()
.
Что-то вроде этого:
# the new value for the `value attribute`
$NewModelInput = "{'info':'999','horlgto':'888','horlgtb':'777'}"
$SelectItem = $SelectXML.SelectSingleNode("//parameters/parameter[@name='modelInputParameters']")
# update the value attribute for this node
$SelectItem.SetAttribute("value", $NewModelInput)
Комментарии:
1. Это работает проще, спасибо, однако мне все равно нужно каким-то образом «поместить» это в API.
2. @T.Huisman Я думаю, это был не тот вопрос, поскольку никто, кроме вас, не может проверить, чего ожидает API при выполнении
Invoke-Restmethod -Uri $ProdUrl -Method Put
.. Я ответил «Значение, которое я хочу перезаписать, — это $SelectItem.Node.value со значением $ NewModelInput, но я не совсем уверен, как это сделать».3. Извините, если было неясно, я хочу обновить поле на стороне сервера. Я надеялся, что смогу сделать это простым способом, подобным тому, как я получил информацию.
4. @T.Huisman Что ж, сначала вам нужно «получить» данные, как вы это делаете, затем изменить атрибут, как я вам показал, и затем «Поместить» или «Опубликовать» обновленный xml ($ ProdData) обратно на сервер. Поскольку я ничего не знаю об API этого сервера, вам придется попробовать самим.
5. Я смог опубликовать весь xml с измененным значением, спасибо!