如何使用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!您的脚本会发生一些事情。
- 您的旧字符串和新字符串中的引号太多 - 将找不到旧字符串。通常,应使用单引号,除非嵌入的
$variableName
要扩展其值。 - 括号被视为正则表达式特殊字符,因为您使用的是
-replace
语法。[string]
对象的.Replace
方法可用于简单替换而无需正则表达式。 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 使用XPath使用PowerShell更新XML
添加位于多级的 XML 内容 - PowerShell 函数