Powershell -replace正则表达式不能处理连接字符串

时间:2015-03-16 18:16:48

标签: regex powershell

我正在尝试使用Powershell -replace命令更新配置文件中的数据源。但是,下面的-replace正则表达式不会删除$oldServer值。

我已经将一个字符串直接放在循环中的$_.connectionString变量中并且保存得当,所以我知道这不是问题。似乎只是正则表达式。

    #environment variables
    $env = "DEV"                    
    $oldServer = "quasq10"          
    $newValue = "$env-AR-SQL.CORP.COM"

    $doc = [xml](Get-Content "D:\AMS\app.config")      
    $doc.configuration.connectionStrings.add|%{        
        $_.connectionString = $_.connectionString -replace $oldServer, $newValue;
    }
    $doc.Save($file.FullName)

修改

根据下面的评论,我添加了一个Write-host $_.connectionString语句作为循环中的第一行。以下是控制台输出

  

metadata = res:// /MonetDb.csdl|res:// /MonetDb.ssdl|res://*/MonetDb.msl;provider=System.Data.SqlClient;provider connection string =“data source = quasq10 \ sql08a; initial catalog = MyDB   ; integrated security = True; multipleactiveresultsets = True; App = EntityFramework“

1 个答案:

答案 0 :(得分:1)

我只是将此权限放入ISE,我将您的连接字符串复制到一个变量中,并且可以将此替换为一次性。

$connectionString = 'metadata=res:///MonetDb.csdl|res:///MonetDb.ssdl|res://*/MonetDb.msl;provider=System.Data.SqlClient;provider connection string="data source=quasq10\sql08a;initial catalog=MyDB ;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"'
$env = "DEV"
$oldServer = "quasq10"          
$newValue = "$env-AR-SQL.CORP.COM"

$connectionString -replace $oldServer, $newValue
  

res:///MonetDb.csdl | res:///MonetDb.ssdl | res://*/MonetDb.msl; provider = System.Data.SqlClient; provider connection string =" data source = DEV-AR-SQL.CORP.COM \ sql08a;初始目录= MyDB;集成安全性= True; multipleactiveresultsets = True; App = EntityFramework"

我认为你的foreach循环可能无法获得你想要的信息,因为看起来你的替换很好。

$doc.configuration.connectionStrings.add

我对XML没有太多帮助,XML数据类型是否具有ADD成员函数?你并没有真正添加任何东西,对吧?

作为测试,你从中得到了什么:

$doc.configuration.connectionStrings | % {        
    $_.connectionString -replace $oldServer, $newValue;
}

针对虚拟文件运行它,看看会发生什么。

对替换运算符进行健全性检查:

$string = "The quick brown fox jumped over the lazy dog"
$oldColor = "brown"
$newColor = "orange"

$string -replace $oldColor, $newColor

为避免挖掘评论,此方法有效

$string.Replace($oldColor,$newColor)