2017-02-19 21 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. Использование = установит значение. Использование -eq определит, соответствует ли значение другому значению.