如何改变网页的价值.使用powershell配置文件



嗨,我正试图改变一个网络连接字符串的值。配置文件出错:

在此对象上找不到属性'connectionString'。验证该属性是否存在并且可以设置。

下面是我使用的脚本:
$webConfig = 'C:UserstestDesktopwebweb.config'
$doc = (Get-Content $webConfig) -as [Xml]
$obj = $doc.configuration.appSettings.add | where {$_.Key -eq 'CommandTimeOut'}
$obj.value = '60'
$config = [xml](gc $webConfig)  
$con= $config.configuration.connectionStrings.add|where-object{$_.name -eq "password"};
$con.connectionString = $con.connectionString -replace "123456", "admin1234"
$doc.Save($webConfig)

我已经修改了代码如下,但它仍然不工作,我得到相同的错误。

$cfg = [xml](gc $webConfig) 
$con= $cfg.configuration.connectionStrings.add|where-object{$_.name -eq "password"};
$cfg.configuration.connectionStrings.add.connectionString=   
$cfg.configuration.connectionStrings.add.connectionString -replace "123456","admin123"
$doc.Save($webConfig)

有点晚了,但为了防止有人找到它的用途,我为此编写了一个可重用的Power-Shell。

    #set the value of this to your own db config
$myConnectionString = "Data Source=.;Initial Catalog=<Database>;Integrated Security=True";
$webConfig = '.ApiWeb.config'
$dbUpConfig = '.DatabaseApp.config'
$unitTestConfig = '.TestApp.config'
Function updateConfig($config) 
{ 
$doc = (Get-Content $config) -as [Xml]
$root = $doc.get_DocumentElement();
$activeConnection = $root.connectionStrings.SelectNodes("add");
$activeConnection.SetAttribute("connectionString", $myConnectionString);
$doc.Save($config)
} 
updateConfig($webConfig)
updateConfig($dbUpConfig)
updateConfig($unitTestConfig)

这里是一个循序渐进的例子:

[xml]$x='<connectionStrings>
<add name="membership" connectionString="Data Source=server1;Initial Catalog=inventory;MultipleActiveResultSets=true;user id=inventoryWebUser;password=123456" providerName="System.Data.SqlClient" />
<add name="test" connectionString="Data Source=server1;Initial Catalog=inventory;MultipleActiveResultSets=true;user id=inventoryWebUser;password=123456" providerName="System.Data.SqlClient" />
</connectionStrings>'
$mycon=$x.connectionStrings.add |?{$_.name -eq "membership"}
$mycon.connectionString=$mycon.connectionstring -replace "password=123456","password=admin123"
$x.save("c:tempnewconf.xml")
gc c:tempnewconf.xml

一种比较脏的方法是不解析xml而替换文本,就像这样(如果之前没有定义连接字符串):

$replacementstring=@"
<connectionStrings>
  <add 
    name="NorthwindConnectionString" 
    connectionString="Data Source=serverName;Initial 
    Catalog=Northwind;Persist Security Info=True;User 
    ID=userName;Password=password"
    providerName="System.Data.SqlClient"
  />
</connectionStrings>
"@
(gc c:tempweb.config) -replace "<connectionStrings/>" ,$repl  | out-file c:tempnew_web.config

最新更新