2016-10-05 4 views
0

У меня есть сценарий PowerShell для замены записей веб-конфигурации DEV значениями QA.Escape double quotes in -replace

До сих пор хорошо, но теперь у меня есть некоторые значения в двойные кавычки:

(Get-Content $targetFile) | 
     Foreach-Object {    
      $_ -replace "<add key="Path" value="/DEV/Reports" />", "<add key="WebReportsPath" value="/QA/Reports" />" ` 
       -replace "<add key="EmpReport" value="/DEV/Emp/Reports" />", "<add key="EmpReport" value="/QA/Emp/Reports" />" `           
       -replace "olddatabase", "newdatabase" 

     } | 
     Set-Content $targetFile 

Я получаю ошибку синтаксического анализа, когда я бегу. Если изменить двойные кавычки в одинарные кавычки, как

`-replace 'valwithdoublequote' 'valwithdoublequote' still I get parser error. How to escape this? 

ответ

4

Поскольку -replace использует регулярное выражение, вы должны использовать [regex]::Escape, чтобы избежать ваших персонажей (или использовать $_.Replace() вместо):

(Get-Content $targetFile) | 
     Foreach-Object {    
      $_ -replace [regex]::Escape('<add key="Path" value="/DEV/Reports" />'), '<add key="WebReportsPath" value="/QA/Reports" />' ` 
       -replace [regex]::Escape('<add key="EmpReport" value="/DEV/Emp/Reports" />'), '<add key="EmpReport" value="/QA/Emp/Reports" />' `           
       -replace "olddatabase", "newdatabase" 

     } | 
     Set-Content $targetFile 
+0

Великого. Благодарю. Но у меня есть цикл for, поскольку у нас есть QA1 - QA 4. Возможно ли заменить счет? '-replace [regex] :: Escape (''), ' ''. Я получаю плохой аргумент замены – Billa

+0

, поскольку вы используете одинарные кавычки, вы также должны использовать строку формата, такую ​​как 'replace [regex] :: Escape (''), ('' -f $ i) ' –