0

我一直在尝试在 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'
        }

我阅读了帮助文档/在线搜索,但找不到任何关于如何达到预期结果的提示。有什么我想念的吗?感谢您的帮助。

4

1 回答 1

1

你很近。值是一个字符串,所以只需像添加任何其他字符串一样附加您想要的内容。我使用+=下面来做到这一点。

$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>
于 2021-06-14T05:20:07.780 回答