部署的大量web.config修改

时间:2017-02-19 02:45:37

标签: powershell devops

我知道这已经在很多线程中提出来了,但到目前为止我还没有找到适合我的解决方案。基本上我们有大约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

我整天都在为此而战,所以如果有人能指出我正确的方向,我会很感激。我不是在找人为我写一个解决方案,只是寻找指针,因为我不能成为那里遇到这个挑战的唯一人。

1 个答案:

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