Powershell для обновления xml не работает должным образом - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть фрагмент xml, подобный приведенному ниже:

<userSettings>
  <setting name="DataLimit">500</setting>
  <setting name="ChunkSize">7000</setting>
  <setting name="RequestFormat">rawXML</setting>

Я хочу обновить значение ячейки xml в ChunkSize с 7000 до 500000, и у меня есть следующий скрипт, который я выбрал из Переполнение стека:

$xml = [xml](Get-Content "C:\Users\ldap_user\AppData\Local\Office Connection\OfficeReportingSettings.xml")
$xml.SelectNodes("//ChunkSize") | % { 
    $_."#text" = $_."#text".Replace("7000", "5000000") 
    }

$xml.Save("C:\Users\ldap_user\AppData\Local\Office Connection\OfficeReportingSettings.xml")

Скрипт не выдает ошибку, и я вижу, что отметка времени файла. xml изменилась на текущее время. Однако значение все еще остается 7000. Пожалуйста, дайте мне знать, что я пропускаю. Также я хочу запустить это для того же файла. xml, находящегося в сотнях профилей пользователей на одном терминальном сервере. Кстати, я запускаю этот скрипт на сервере Windows 2016, и версия Powershell:

(Get-Host).Version

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  3383    

Заранее большое спасибо

1 Ответ

1 голос
/ 21 февраля 2020

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

$xml.SelectNodes("//setting[@name='ChunkSize']") | Foreach-Object { 
    $_.'#text' = $_.'#text'.Replace('7000','5000000') 
}

Синтаксис XPath разбивается на //element и [@attribute='value']. setting это элемент. name является атрибутом. ChunkSize является значением атрибута. Помните, что запросы XPath чувствительны к регистру.

...