编辑XML对象 - 连接字符串

Hop*_*mer 0 xml powershell

我有一个XML配置作为xml对象加载到我的脚本中$appConfig.我试图用我自己的字符串替换连接字符串值.这是我到目前为止找到的目标字符串:

$appConfig.configuration.connectionStrings.add |
    ? {$_.name -eq $dbName} |
    select connectionString
Run Code Online (Sandbox Code Playgroud)

我基本上想要类似于此的东西:

$appConfig.configuration.connectionStrings.add |
    ? {$_.name -eq $dbName} |
    select connectionString = $updatedConnectionString
Run Code Online (Sandbox Code Playgroud)

我很确定我需要创建一个变量并用它来填充它$appConfig但每次我尝试时我最终都会使用另一个XML对象而不是$appConfig按预期编辑目标对象.我将$appConfig其写回原始文件位置并完成编辑.我似乎无法在这里获得正确的语法.

我的XML示例与字符串相关:

<configuration>
<connectionStrings>
    <add name="db" connectionString="Data Source=(local);Initial Catalog=MyDB;Integrated Security=True" providerName="System.Data.SqlClient" />
    <add name="dbFiles" connectionString="Data Source=(local);Initial Catalog=MyDB;Integrated Security=True" providerName="System.Data.SqlClient" />
    <add name="dbReporting" connectionString="Data Source=(local);Initial Catalog=MyDB;Integrated Security=True" providerName="System.Data.SqlClient" />
    <add name="Logging" connectionString="Data Source=(local);Initial Catalog=MyDB;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

Ans*_*ers 5

如果你想使用点符号,你可以这样做:

$node = $appConfig.configuration.connectionStrings.add |
        Where-Object {$_.name -eq $dbName}
$node.connectionString = $updatedConnectionString
$appConfig.Save()
Run Code Online (Sandbox Code Playgroud)

或者像这样(如果您不想在修改其属性之前将所选节点分配给变量):

($appConfig.configuration.connectionStrings.add | Where-Object {$_.name -eq $dbName}).connectionString = $updatedConnectionString
$appConfig.Save()
Run Code Online (Sandbox Code Playgroud)

另一种方法是将该SelectSingleNode()方法与XPath表达式一起使用,例如:

($appConfig.SelectSingleNode("//add[@name='$dbName']").connectionString = $updatedConnectionString
$appConfig.Save()
Run Code Online (Sandbox Code Playgroud)