我正在尝试使用Powershell -replace
命令更新配置文件中的数据源。但是,下面的-replace
正则表达式不会删除$oldServer
值。
我已经将一个字符串直接放在循环中的$_.connectionString
变量中并且保存得当,所以我知道这不是问题。似乎只是正则表达式。
#environment variables
$env = "DEV"
$oldServer = "quasq10"
$newValue = "$env-AR-SQL.CORP.COM"
$doc = [xml](Get-Content "D:\AMS\app.config")
$doc.configuration.connectionStrings.add|%{
$_.connectionString = $_.connectionString -replace $oldServer, $newValue;
}
$doc.Save($file.FullName)
修改
根据下面的评论,我添加了一个Write-host $_.connectionString
语句作为循环中的第一行。以下是控制台输出
metadata = res:// /MonetDb.csdl|res:// /MonetDb.ssdl|res://*/MonetDb.msl;provider=System.Data.SqlClient;provider connection string =“data source = quasq10 \ sql08a; initial catalog = MyDB ; integrated security = True; multipleactiveresultsets = True; App = EntityFramework“
答案 0 :(得分:1)
我只是将此权限放入ISE,我将您的连接字符串复制到一个变量中,并且可以将此替换为一次性。
$connectionString = 'metadata=res:///MonetDb.csdl|res:///MonetDb.ssdl|res://*/MonetDb.msl;provider=System.Data.SqlClient;provider connection string="data source=quasq10\sql08a;initial catalog=MyDB ;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"'
$env = "DEV"
$oldServer = "quasq10"
$newValue = "$env-AR-SQL.CORP.COM"
$connectionString -replace $oldServer, $newValue
res:///MonetDb.csdl | res:///MonetDb.ssdl | res://*/MonetDb.msl; provider = System.Data.SqlClient; provider connection string =" data source = DEV-AR-SQL.CORP.COM \ sql08a;初始目录= MyDB;集成安全性= True; multipleactiveresultsets = True; App = EntityFramework"
我认为你的foreach循环可能无法获得你想要的信息,因为看起来你的替换很好。
$doc.configuration.connectionStrings.add
我对XML没有太多帮助,XML数据类型是否具有ADD成员函数?你并没有真正添加任何东西,对吧?
作为测试,你从中得到了什么:
$doc.configuration.connectionStrings | % {
$_.connectionString -replace $oldServer, $newValue;
}
针对虚拟文件运行它,看看会发生什么。
对替换运算符进行健全性检查:
$string = "The quick brown fox jumped over the lazy dog"
$oldColor = "brown"
$newColor = "orange"
$string -replace $oldColor, $newColor
为避免挖掘评论,此方法有效
$string.Replace($oldColor,$newColor)