gpt4 book ai didi

powershell - 为变量转义 Powershell 中的所有密码特殊字符

转载 作者:行者123 更新时间:2023-12-03 01:27:50 25 4
gpt4 key购买 nike

我有以下场景,在 Powershell v5 上运行:

Powershell 脚本在批量 for-each 循环中从 API 调用中提取几位信息到第 3 方系统,并将它们分配给变量。提取的信息包括密码(这样做是为了摆脱上述第 3 方系统并将其迁移到不允许您以纯文本形式检索密码的东西):

$userset = Invoke-WebRequest -Method Post -Uri "https://$Url/path/to/api.asmx" -Headers $Headers -Body $usercall

$xmluserset = [xml] $userset.Content

$userset2 = $xmluserset.Envelope.Body.UserSettingsResult.settingValues.string

$userpasstemp = $userset2[1].trimstart("password")
$userpass = $userpasstemp.trimstart("=")

然后在脚本的其他地方使用这些密码。

例如,它们被传递给不同的 API,并且需要采用 URL 兼容格式,因此我运行以下命令:
$urlescapeduserpass = [uri]::EscapeDataString($userpass)

适用于脚本的该部分

问题是这些密码可以包含任何特殊字符:
!"#$%&'()*+,-./:;<=>?@[]^_`{|}~

当我调用脚本的另一部分时,密码字符串中的特殊字符会导致失败并且脚本退出。使用任一调用命令时会发生这种情况:
& .\application.exe --option1 $option1 --user1 $user --password1 $userpass

或使用调用表达式时
$command = "$path\application.exe  --option1 $option1 --user1 $user --password1  $userpass"
Invoke-Expression $command

我尝试使用正则表达式,使用 -replace cmdlet:
$escapedpass = $userpass -replace ' !"#$%&()*+,-./:;<=>?@[\]^_`{|}~', '`$&'

但是没有运气,我知道类似于 [uri]escapedatastring,Regex 也有类似的,但似乎没有 Powershell 的原生。我确信有一个 [contenttype] 将具有一个 native 函数来转义特殊字符或某种方式来实现最终结果。

最佳答案

因为 PowerShell 对嵌入式 " 的处理传递给外部程序的参数中的字符损坏 (从 PowerShell 7 开始)- 见 this answer - 您需要手动 \ -逃脱"字符 嵌入到您的字符串中:

$escapedpass = $userpass -replace , '"', '\"'

在您的命令上下文中:
& .\application.exe --option1 $option1 --user1 $user --password1 ($userpass -replace , '"', '\"')

关于powershell - 为变量转义 Powershell 中的所有密码特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60732817/

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