我仔细阅读了 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\")