PowerShell:如何为含反引号的密码添加额外反引号?
解决PowerShell密码中反引号丢失的问题
问题核心是:双引号字符串里的`会被PowerShell当成转义字符解析,直接丢失,导致后续替换操作根本找不到目标字符。
为什么你的代码失效
你写的$Passwd = "StringWithCharacter"中,是转义符,PowerShell会把C解析成普通的C,变量$Passwd里根本没有反引号,所以replace('','``')找不到任何可替换的内容,输出自然和原变量一致。
解决方案
1. 输入阶段保留反引号
- 如果是手动输入密码,用
Read-Host读取,它会完整保留用户输入的所有字符,包括反引号:$Passwd = Read-Host "输入解密密码" # 此时输入含`的密码,变量会完整存储原始内容 - 如果是硬编码或从变量赋值,用单引号包裹字符串,单引号里的`不会被解析为转义符:
$Passwd = 'StringWith`Character'
2. 正确添加转义反引号
当你需要把密码传递给需要转义反引号的场景时(比如某些解密命令要求反引号转义),再执行替换:
$Passwd = 'StringWith`Character' $new_pw = $Passwd.Replace('`', '``') Write-Output "原密码:$Passwd" Write-Output "转义后密码:$new_pw"
输出结果:
原密码:StringWith`Character 转义后密码:StringWith``Character
注意
如果密码已经在双引号赋值时丢失了反引号,是无法通过后续操作恢复的——因为转义后的字符已经被PowerShell处理,原始反引号不存在了。所以关键是在接收或存储密码的第一步就保留原始字符。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

