@ArtemiyFedorov

Как отредактировать XML в PowerShell?

Приветствую!
Столкнулся с проблемой отредактировать xml в powershell. Дело не хитрое, но что-то идет не так.
Ниже упрощенный кусок xml, мне требуется изменить параметр SerialConnectionTimeout.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <applicationSettings>
    <Vendor.Some.App.Properties.Settings>
      <setting name="TimeoutStep" serializeAs="String">
        <value>300</value>
      </setting>
      <setting name="TimeoutDuration" serializeAs="String">
        <value>5000</value>
      </setting>
      <setting name="SerialConnectionTimeout" serializeAs="String">
        <value>1000</value>
      </setting>
    </Vendor.Some.App.Properties.Settings>
  </applicationSettings>
</configuration>


Пробую читать так:
$xml = New-Object -TypeName XML
$file = 'C:\config.xml'
$xml.Load($file)
$xml.configuration.applicationSettings.'Vendor.Some.App.Properties.Settings'.setting.SerialConnectionTimeout

- Получаю NULL. Там не совсем те объекты, которые я ожидал увидеть. Свойства не именованные, по имени обратиться не могу - объекты имеют стандартные свойства name,value.
Можно с помощью конструкции where прочитать, но смысла не вижу, так как мне эти данные нужно отредактироваnь и сохранить с прежней структурой обратно.
$xml.configuration.applicationSettings.'Vendor.Some.App.Properties.Settings'.setting.name `
| where {$_.name -eq "SerialConnectionTimeout"} | select -ExpandProperty value


Понимаю, что мне сначала необходимо массив Setting'ов как-то десериализовать/сконвертировать в привычные объекты, изменить, сериализовать обратно и сохранить, но десериализовать у меняя тоже не получилось с ходу.
Как правильно отредактировать?
  • Вопрос задан
  • 927 просмотров
Решения вопроса 1
@NortheR73
системный инженер
а так пробовали?
$node = $xml.configuration.applicationSettings.'Vendor.Some.App.Properties.Settings'.setting `
| where {$_.name -eq "SerialConnectionTimeout"}
$node.Value = "yourvalue"
...
$xml.Save($file)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы