gpt4 book ai didi

powershell - 如何在PowerShell中对动态变量的内容进行转义?

转载 作者:行者123 更新时间:2023-12-02 23:20:28 25 4
gpt4 key购买 nike

假设我有一个$password = Get-Passwd ACME\bob变量,可以在其中获取给定用户的密码。密码包含PowerShell所使用的各种特殊字符,包括$

我需要在以下命令中动态使用密码:

cmdkey.exe /add:$hostname /user:"$user" /pass:"`"$password`""

我需要在两侧转义 "字符,以便将命令解析为 pass:"123qwe"而不是 pass:123qwe。问题是,当密码包含 $字符时,密码将中断。如何在不破坏密码的情况下将密码传递给该命令?

最佳答案

在PowerShell中运行可执行文件

对于大多数可执行文件,无需在PowerShell中手动引用参数。只需使用任何变量编写命令,PowerShell解析器就会自动引用程序命令行的参数。通常这“行之有效”。

cmdkey.exe /add:hostname /user:username /pass:$pass

您可以使用我编写的名为 showargs.exe的小程序检查PowerShell传递给可执行文件的实际命令行,该程序可在以下页面上找到:

https://www.itprotoday.com/management-mobility/running-executables-powershell

例:
showargs cmdkey.exe /add:hostname /user:username /pass:$pass
showargs.exe程序仅将其命令行回显到标准输出,因此您可以看到PowerShell实际传递给可执行文件的文字命令行。

嵌入的 $字符应该不是问题。如果该字符在PowerShell字符串变量中,PowerShell会将其作为命令行字符串的一部分传递。例:
$pass = 'my$pass'
cmdkey.exe /add:hostname /user:username /password:$pass

无论您如何将命令行传递给程序,都必须注意,该命令行的解释取决于该单个程序。 (例如,如果可执行文件的解析器不支持某些字符,则无需使用大量引号或解析即可解决该限制。)

Cmdkey.exe使用非标准解析器

在对 cmdkey.exe进行预测试时,似乎没有办法在其命令行上“转义” "字符。既然是这种情况,您将无法使用 cmdkey.exe来存储包含嵌入式 "字符的凭据。

在Cmdkey.exe命令行参数中嵌入空格

由于 cmdkey.exe使用非标准的命令行解析器,因此您不能在其命令行上使用包含嵌入式空格的变量。例如:
PS C:\> $pass = "my pass"
PS C:\> showargs cmdkey.exe /add:hostname /user:username /password:$pass
cmdkey.exe /add:hostname /user:username "/password:my pass"
"/password:my pass"显然会混淆 cmdkey.exe解析器,因此我们必须绕过PowerShell的默认解析行为来解决此问题。最简单的方法是转义包含空格的参数周围的引号:
PS C:\> showargs.exe cmdkey.exe /add:hostname /user:username /password:`"$pass`"
cmdkey.exe /add:hostname /user:username /password:"my pass"

无论如何,您都可以使用 showargs.exe来诊断故障,并制定出适合于您需要运行的可执行文件的解决方案。

关于powershell - 如何在PowerShell中对动态变量的内容进行转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52061778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com