更新 xml 的 Powershell 未按预期工作

Powershell to update xml not working as expected

我有一个 xml 片段,如下所示:

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

我想将 ChunkSize 的 xml 单元格值从 7000 更新为 500000,并使用我从 Stack Overflow 中获取的以下脚本:

$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    

非常感谢

您在保存更新内容时遇到问题,因为您实际上并未对内容进行任何更改。您的节点选择语法必须更改,以便您实际选择适用的元素和属性。

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

XPath 语法分解为 //element[@attribute='value']setting 是元素。 name 是属性。 ChunkSize 是属性值。请记住,XPath 查询区分大小写。