作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我的 PowerShell 脚本运行时,它会提示用户输入密码参数。该密码可以包含任意数量的特殊字符,例如 *\~;(%?.:@/
然后将该密码用作 .exe 命令的参数,但由于某些特殊字符没有正确转义,它通常是不正确的。
一个过去的密码示例是 $(?-.?-(。我需要转义的唯一字符是 '(',我将其替换为 '`(' 以使其工作。但是,该密码现在已过期。新密码就像 *\~;~(%?.:@/
*注意:这些密码中也混有随机数字和字母,但已被编辑。
新密码中不是第一个的唯一字符是 *\~;%:@/
有没有一种简单的方法可以转义所有字符并按原样接受任何用户输入?如果没有,有人介意帮我逃脱这些特殊字符吗?
param (
[Parameter(Mandatory=$true)][string]$password
)
Invoke-Expression -Command "<path_to_exe> -install $user $password"
最佳答案
您正在使用 Invoke-Expression
调用外部程序 :
Invoke-Expression
should generally be avoided :它会导致引用问题(就像你的情况一样),但更重要的是,它可能存在安全风险,通常有更好的解决方案。"
的参数的引用挑战。字符。 - 见脚注 [1] 和 this answer . & <path_to_exe> -install $user $password
&
, PowerShell 的
call operator , 仅当您的可执行文件的路径被引用(例如,
"C:\Program Files\foo.exe"
)和/或通过变量引用(例如,
$HOME\foo.exe
)指定时才需要;否则,您可以按原样调用可执行文件(例如,要调用
cmd.exe
,使用类似
cmd /c 'echo hi'
的内容)。
-replace
与 character class , [...]
:
"
的处理中断传递给外部程序的参数值中嵌入的字符,您可能需要转义
"
字符(仅),如
\"
[1]。
PS> 'a*b\c~d;e(f%g?h.i:j@k/l' -replace '[*\\~;(%?.:@/]', '`$&'
a`*b`\c`~d`;e`(f`%g`?h`.i`:j`@k`/l # all chars. inside [...] were `-escaped
\
即使在字符类中也有特殊含义,它必须转义为
\\
- 所有其他字符。按原样使用。
-replace
的信息运算符(operator),见
this answer .
"
.由于历史原因,PowerShell 没有正确传递嵌入式
"
正确到外部程序,烦人地需要手动
\
- 转义 - 见
this GitHub issue详情。
& <path_to_exe> -install $user ($password -replace '"', '\"'
)
关于powershell - 如何在 PowerShell 中转义特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965466/
我是一名优秀的程序员,十分优秀!