【问题标题】:Editing an XML object - Connection Strings编辑 XML 对象 - 连接字符串
【发布时间】:2016-04-13 17:55:48
【问题描述】:

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

$appConfig.configuration.connectionStrings.add |
    ? {$_.name -eq $dbName} |
    select connectionString

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

$appConfig.configuration.connectionStrings.add |
    ? {$_.name -eq $dbName} |
    select connectionString = $updatedConnectionString

我很确定我需要创建一个变量并用$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>

【问题讨论】:

  • 那里有 4 个元素,其中有 connectionString 属性。您想更改其中的哪些,您想为它们分配哪些新值?
  • 那么 $dbName 变量定义了传递给函数的目标,我选择不包含它,因为变量会随着名称值的变化而变化。因此,如果我想出 1 的答案,我就会得到改变其中任何一个的答案。
  • 更进一步;我只是试图用一个字符串替换“Data Source=(local);Initial Catalog=MyDB;Integrated Security=True”。但是,我想尝试将其作为一个 xml 对象来执行,而不仅仅是字符串替换,因为不同的配置会使这个过程变得困难。

标签: xml powershell


【解决方案1】:

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

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

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

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

另一种方法是使用带有 XPath 表达式的 SelectSingleNode() 方法,例如像这样:

($appConfig.SelectSingleNode("//add[@name='$dbName']").connectionString = $updatedConnectionString
$appConfig.Save()

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多