通过 Powershell 在 XML 文档中附加属性值

Appending attribute value in a XML document via Powershell

我一直在尝试在 powershell 中开发一个脚本,它可以更新/附加新的属性值(不更改现有值),最多 4 个值由“,”分隔。

文件格式为

    <configuration>
      <appSettings>        
         <add key="servername" value="server1"/>
      </appSettings>          
   </configuration>

想要的结果是

   <configuration>
      <appSettings>        
         <add key="servername" value="server1,server2,server3,server3,server4"/>
      </appSettings>          
   </configuration>

我可以通过以下代码添加新值但不能保留旧值

$file = "C:\Users\test\Desktop\server.exe.config"
$xml = [xml] (Get-Content $file)
$XPpath = "/configuration/appSettings/add[@key='servername']"
$nodes = $xml.SelectNodes($XPpath)

foreach ( $n in $nodes ) {
        $n.value = $n.value = 'server2'
        }

我阅读了帮助文档/进行了在线搜索,但没有找到任何有关如何获得所需结果的提示。我有什么想念的吗?感谢您的帮助。

你很接近。 Value 是一个字符串,所以就像附加任何其他字符串一样,只需附加您想要的内容即可。我在下面使用 += 来执行此操作。

$xml = [xml]@'
<configuration>
<appSettings>
   <add key="servername" value="server1"/>
</appSettings>
</configuration>
'@

$XPpath = "/configuration/appSettings/add[@key='servername']"
$nodes = $xml.SelectNodes($XPpath)

foreach ( $n in $nodes ) {
    $n.value += ',server2,server3,server4,server5'
}

# or
# $xml.configuration.appSettings.add.value += ",server2,server3,server4"


$xml.configuration.appSettings.add.value
# output: server1,server2,server3,server4,server5

$xml.Save(".\new.xml")

# new.xml:
# <configuration>
#   <appSettings>
#     <add key="servername" value="server1,server2,server3,server4,server5" />
#   </appSettings>
# </configuration>