2017-02-19 31 views
0

我知道这已经提出了大量的线程,但到目前为止我还没有遇到一个解决方案,正在为我工​​作。基本上我们有大约300个网站,在web.configs中都有独特的数据库连接字符串。当开发发布一个新版本时,我们不得不手动将连接字符串从web.config的备份复制到新的web.config中。有300个网站,这是耗时且容易出错的。我想从中删除人为因素,并且正在寻找PowerShell来帮助解决这个问题。大规模部署web.config修改

我的思维过程如下:可搜索现有的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

如果你想摆脱那个错误..用-eq替换等号 – JonnyBoy

回答

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将检测值是否等于另一个值。