私は PowerShell オプションを熟読し、エンコーディング、引用符、およびその他のいくつかの問題を乗り越えた後、これが私の最終的な解決策です。
powershell "& {(Get-Content $env:LOG_FILENAME)|Foreach-Object {$_ -replace [regex]::escape($env:PASSWORD), '######'} | Set-Content ($env:LOG_FILENAME+\".clean.\"+(get-date).toString('yyyyMMddhhmmss')+\".log\")}"
この行は、デプロイメント スクリプトの最後のステップとして、バッチ ファイルから呼び出されます。スクリプトの前半で、LOG_FILENAME と PASSWORD の値が設定されています。
それを分解する:
バッチ ファイルから PowerShell を実行する:
powershell "& {...}"
ログファイルの読み取り:
(Get-Content $env:LOG_FILENAME)
各行で、[regex]::escape($env:PASSWORD) を「######」に置き換えます。
Foreach-Object {$_ -replace [regex]::escape($env:PASSWORD), '######'}
正規表現の予約文字として解釈される可能性がある PASSWORD 環境変数内の文字をエスケープします。
[regex]::escape($env:PASSWORD)
元の名前に .clean.[timestamp].log を追加して、出力を新しいログ ファイルに保存します。
Set-Content ($env:LOG_FILENAME+\".clean.\"+(get-date).toString('yyyyMMddhhmmss')+\".log\")