0

PowerShellスクリプトの初心者です。 私はpowershellメジャーバージョン5を使用してスクリプトを開発しようとしました。私のスクリプトの目的は、いくつかの文字列を含むテンプレートファイルの文字列リテラルをほとんど置き換えることではありません。文字列リテラルの1つはファイルの内容に置き換えられます。

$ReleaseScript = Get-Content $SourceFile -Raw 

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

上記の置き換えは、$ ReleaseScriptのファイルコンテンツ自体に$ _がある場合を除いて正常に動作します。 置換文字列の内容を置き換えることを避けるためのエスケープ文字やその他の方法で目的を達成する方法はありますか?

+0

使用 '$$' *シングルに*文字列を置換-quoted。 [regexリファレンス](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()文字列メソッドで置き換える)

関連する問題