0

저는 PowerShell 스크립팅을 처음 사용합니다. 필자는 powershell major version 5를 사용하여 스크립트를 개발하려고했습니다. 제 스크립트의 목적은 템플릿 파일의 일부 문자열 리터럴을 일부 문자열로 대체하는 것입니다. 문자열 리터럴 중 하나는 파일의 내용으로 대체됩니다. 위의

$ReleaseScript = Get-Content $SourceFile -Raw 

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

은 $ ReleaseScript 자체에 파일 내용이 _ $이있는 경우를 제외하고 잘 작동을 대체합니다. 이스케이프 문자를 사용하여 문자열 바꾸기 내용을 바꾸거나 다른 방법으로 목표를 달성하지 못하도록 할 수 있습니까?

+0

사용'$$'A * 하나에 * 문자열을 대체 -quoted. [regex reference] (https://msdn.microsoft.com/en-us/library/az24scfc (v = vs.110) .aspx # 대체)를 참조하십시오. 나는이 문제를 완전히 이해할 수 있을지 모르겠다. 나는 대답으로 이것을 게시하지 않을 것이다. – wOxxOm

+1

사실, 문자열 리터럴을 대체하는 것은 문자열 대체 메서드를 사용합니다 :'$ _. replace ('string1', 'string2')' – wOxxOm

답변

0

-replace 정규식이 일치하지 않습니다. 다음과 같은 정규 표현식 특수 문자를 이스케이프 처리해야합니다.

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

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

(또는, @wOxxOm의 주석으로, 문자열 리터럴은 .Replace() 문자열 메쏘드로 대체)