Я просмотрел вариант 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\")