0

Я новичок в скриптах powershell. Я попытался разработать скрипт с использованием powershell major версии 5. Цель моего скрипта - заменить несколько строковых литералов в файле шаблона, с некоторыми строками. Обратите внимание, что один из строковых литералов заменяется содержимым файла.

$ReleaseScript = Get-Content $SourceFile -Raw 

(Get-Content $ChangeSetTemplatefile -Raw) | 
ForEach-Object { 
$_ -replace '<insert_script_here>', $ReleaseScript ` 
-replace '<username>'   , $UserName 
} 
| Set-Content $CSDestinationFile" 

Вышеупомянутая замена отлично работает, за исключением случаев, когда содержимое файла в $ ReleaseScript имеет значение $ _. Есть ли способ иметь escape-символ, чтобы не заменять заменяющее содержимое строки или каким-либо другим способом достичь цели?

+0

Используйте '' $$ в * одиночный * -quoted заменить строку. См. [Regex reference] (https://msdn.microsoft.com/en-us/library/az24scfc (v = vs.110) .aspx # substitutions). Я не уверен, что полностью понимаю проблему, поэтому я не отправляю это как ответ. – wOxxOm

+1

Er, на самом деле, для замены строковых литералов используется метод замены строки: '$ _. Replace ('string1', 'string2')' – wOxxOm

ответ

0

-replace. Регулярное выражение соответствие. Вам необходимо избегать регулярных выражений специальных символов, что-то вроде:

$ReleaseScript = Get-Content $SourceFile -Raw 
$ReleaseScript = [regex]::Escape($ReleaseScript) 

e.g.

PS C:\> [regex]::Escape('$_') 
\$_ 

(или, как комментарии @wOxxOm, строковый литерал заменить методом .Replace() строки)

Смежные вопросы