更新 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 查询区分大小写。
我有一个 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 查询区分大小写。