我知道这已经在很多线程中提出来了,但到目前为止我还没有找到适合我的解决方案。基本上我们有大约300个网站在web.configs中都有唯一的数据库连接字符串。当开发发布新版本时,我们必须手动将连接字符串从web.config的备份复制到新的web.config中。有300个站点,这是耗时且容易出错的。我想从中删除人类元素,我正在寻求PowerShell来帮助解决这个问题。
我的思考过程如下:
在现有web.config中搜索connectionString信息的脚本,将其转储到保留文件。
读取保留文件然后替换新web.config文件中的适当值的脚本
我在其他线程中尝试了几种解决方案,例如:
Editing Web Config file using Microsoft PowerShell
但无论我尝试什么,我只是在错误后得到错误。我的最新剧本:
$cfg = [xml](gc E:\scripts\web.config)
$cfg.configuration.connectionStrings.add|%{
$_.connectionString = $_.connectionString -replace "QA", "PRODUCTION";
}
$cfg.Save("E:\scripts\Web.config");
正在回归:
Property 'connectionString' cannot be found on this object; make sure it exists and is settable.
At E:\scripts\WebConfig.ps1:4 char:7
+ $_. <<<< connectionString = $_.connectionString -replace "QA", "PRODUCTION";
+ CategoryInfo : InvalidOperation: (connectionString:String) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
我整天都在为此而战,所以如果有人能指出我正确的方向,我会很感激。我不是在找人为我写一个解决方案,只是寻找指针,因为我不能成为那里遇到这个挑战的唯一人。
答案 0 :(得分:0)
这应该对你有用
$cfg = [xml](gc E:\scripts\web.config)
$cfg.configuration.connectionStrings.add|%{
$_.connectionString -eq $_.connectionString -replace "QA", "PRODUCTION";
}
$cfg.Save("E:\scripts\Web.config");
基本上你的问题是你使用了错误的运算符:
%{
$_.connectionString = $_.connectionString -replace "QA", "PRODUCTION";
}
当你应该使用-eq时,你有一个=。 使用=将设置一个值。 使用-eq将检测该值是否等于另一个值。