0
私は、(私はPowerShellのV5.1を使用しています)次のPowerShellスクリプトを持って、私が撮ったし、この前のポストから主に適応した:Replace multiline text in a file using Powershell without using Regex:PowerShellのセット内容複数行を交換する方法
$oldCode = @"
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
<redirectHeaders>
<clear />
</redirectHeaders>
</httpProtocol>
"@
$newCode = @"
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" VALUE="SAMEORIGIN"></add>
</customHeaders>
<redirectHeaders>
<clear />
</redirectHeaders>
</httpProtocol>
"@
$Path = "c:\Windows\System32\inetsrv\config\applicationHost.config"
$Content = (Get-Content $Path -Raw).replace($oldCode,$newCode)
Set-Content -Path $Path -Value $Content -Verbose
これは$ oldCodeに代わるものではありません。私はWrite-Outputを使用して$ Content変数をチェックしましたが、文字列を置き換えていないので、Set-Contentコマンドの問題ではなく、文字列または置換コマンド自体に問題があると想定しています。
これを行うにはどのようなアイデアがありますか?
'Get-Content'は、テキストファイルで使用すると、内容を文字列の配列として返します。配列の各エントリはファイルの1行です。しかし、heredoc(これは '$ oldcode'と' $ newcode'のために使用しています)は文字列配列ではなく単純な文字列なので、 '.replace()'は失敗しています。 –
私がリンクした前の投稿から、 '-Raw'パラメータは' Out-String'に相当すると思いました。 '$ Content.GetType()'を追加すると、配列ではなく文字列であることがわかります( '-Raw'を削除すると)、System.Arrayオブジェクトに戻ります。 –
私は '-Raw'を見逃しました。リンクされたポストは、 '.replace()'メソッドではなく '-replace'演算子を使用しています。 2つは実際に異なって動作します。それらのうちの1人はregexpを使用します(しかし私はどちらを思い出さないか)。 '.replace($ oldcode、$ newcode)'を '-replace $ oldcode、$ newcode'に置き換えてみてください。 –