作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当从另一个环境(例如 Java)调用 PowerShell 脚本时,文字字符串参数需要作为过程参数的一部分传递。
如何清理或转义将作为字符串文字传递给 PowerShell 调用的用户输入?
我在任何地方都找不到完整的指南。
最佳答案
用单引号将文字括起来
`0
(零)个字符 - powershell 可以在内部处理它们,但不能将它们传递给子进程这就是所有人。
我建议将所有参数作为一个空格分隔的字符串传递,即使您使用接受字符串数组的进程启动 API。
如果您传递一个参数数组,PowerShell 将只用单个空格将它们连接起来,然后根据自己的逻辑再次将它们分开。 (即使一个参数以引号开头而另一个参数以引号结尾,这仍然有效。)
传递一组参数只会让代码变得丑陋,掩盖实际发生的事情,并可能提供错误的安全感。
powershell.exe write-host "a b (c)"
导致错误:“无法识别术语 'c'”`(c`)
中转义圆括号似乎是一种解决方案,但实际上只是掩盖了一个错误:参数未被识别为字符串字面意思。提示 当从另一个 shell(如 cmd.exe 或 bash)调用 powershell.exe 时,不要混淆该 shell 的解析和 PowerShell 的解析。例如,引号限制了 cmd.exe 或 bash 的参数,但参数在没有引号的情况下传递给 PowerShell。这可能会导致一些困惑。
关于powershell - 如何安全地将字符串文字参数传递给 powershell.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66419641/
我是一名优秀的程序员,十分优秀!