如何使用XML文件中的PowerShell更新数据源连接字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用XML文件中的PowerShell更新数据源连接字符串相关的知识,希望对你有一定的参考价值。

我正在尝试使用PowerShell自动更新web.config文件中的数据源和新值。

这是我的连接字符串:

<connectionStrings>
    <add name="abcLogging" connectionString="Data Source=(local)abc; Trusted_Connection=True; Persist Security Info=True; Enlist=true; Initial Catalog=abcLogDB" providerName="System.Data.SqlClient" />
</connectionStrings>

PowerShell脚本:

$newstring = '"Data Source=(test)abc; Trusted_Connection=True; Persist Security Info=True; Enlist=true; Initial Catalog=abcLogDB" '
$oldstring = '"Data Source=(local)abc; Trusted_Connection=True; Persist Security Info=True; Enlist=true; Initial Catalog=abcLogDB" '
$XmlDocument = [xml](Get-Content "D:abcWeb.config");
$value = $XmlDocument.configuration.connectionStrings.add.connectionstring 
$value = $value -replace "$oldstring","$newstring" | Set-Content -PassThru 

运行上面的脚本时出现以下错误。

The regular expression pattern "Data Source=(local)abc; Trusted_Connection=True;
Persist Security Info=True; Enlist=true; Initial Catalog=abcLogDB"  is not valid.
At line:5 char:1
+ $value = $value -replace "$oldstring","$newstring" | Set-Content -Pas ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: ("Data Source=(l...og=OnityLogDB" :String) [], RuntimeException
    + FullyQualifiedErrorId : InvalidRegularExpression
答案

欢迎来到StackOverflow,Hari Krishna!您的脚本会发生一些事情。

  1. 您的旧字符串和新字符串中的引号太多 - 将找不到旧字符串。通常,应使用单引号,除非嵌入的$variableName要扩展其值。
  2. 括号被视为正则表达式特殊字符,因为您使用的是-replace语法。 [string]对象的.Replace方法可用于简单替换而无需正则表达式。
  3. Set-Content命令不知道要处理的文件。但你真的不想将文件的内容设置为$value。这样可以获得一个既没有XML内容也没有连接字符串的文件。

这是一个应该做你想要的脚本:

$configFile = 'C:	empweb.config'

Set-Content -Path $configFile -Value @"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
    <add name="abcLogging" connectionString="Data Source=(local)abc; Trusted_Connection=True; Persist Security Info=True; Enlist=true; Initial Catalog=abcLogDB" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
"@

$newstring = 'Data Source=(test)abc; Trusted_Connection=True; Persist Security Info=True; Enlist=true; Initial Catalog=abcLogDB'
$oldstring = 'Data Source=(local)abc; Trusted_Connection=True; Persist Security Info=True; Enlist=true; Initial Catalog=abcLogDB'

$XmlDocument = [xml](Get-Content $configFile);
$XmlDocument.configuration.connectionStrings.add | %{
    If($_.connectionString -eq $oldstring){
        $_.connectionString = $newstring
    }
}
$XmlDocument.Save($configFile)
Get-Content -Path $configFile

编辑:在其他测试期间发现更正的问题。

以上是关于如何使用XML文件中的PowerShell更新数据源连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

Powershell:如何更新XML节点属性值的特定字符

powershell 使用XPath使用PowerShell更新XML

在 Powershell 中查询 XML 文件中的值

添加位于多级的 XML 内容 - PowerShell 函数

如何在 PowerShell 中使用 XmlReader 流式传输大/巨大的 XML 文件?

如何使用 PowerShell 处理数组以查找特定字符串?