You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Unrar兼容PowerShell安全字符串作为密码参数?

问题:WinRAR Unrar工具无法识别从配置文件读取的安全字符串密码

我用以下命令加密自动化流程中的密码,将输出的安全字符串存入配置文件:

Read-Host -AsSecureString | ConvertFrom-SecureString

在PowerShell脚本中读取时用:

$SecurePassword = ConvertTo-SecureString $Config.Configuration.password

这种方式在WinSCP中能正常工作,避免了明文存储。但在WinRAR的Unrar工具中,明文密码可以正常运行:

$PW = "mypassword"
& $unrar_path x $Source_Path.exe -p"$PW" $Destination_Path\

但读取配置文件的安全字符串时,Unrar无法识别密码:

$PW = ConvertTo-SecureString $Config.Configuration.ExtractPass
& $unrar_path x $Source_Path.exe -p"$PW" $Destination_Path\

试过多种语法都无效,请问有可行的解决方法吗?


解决方法

问题出在ConvertTo-SecureString返回的是**System.Security.SecureString类型对象**,直接将其作为参数传给Unrar时,PowerShell会把对象的类型名(而非明文密码)传递给程序,导致Unrar无法识别。

要解决这个问题,需要将SecureString转换为明文字符串,再传递给Unrar。可以借助System.Net.NetworkCredential类实现转换:

# 从配置文件读取并转换为SecureString
$securePW = ConvertTo-SecureString $Config.Configuration.ExtractPass
# 将SecureString转换为明文密码
$plainPW = [System.Net.NetworkCredential]::new("", $securePW).Password
# 调用Unrar工具,传入明文密码
& $unrar_path x $Source_Path.exe -p"$plainPW" $Destination_Path\

安全注意事项

  • 明文密码会短暂存在于内存中,虽然比明文存储配置文件更安全,但用完后可以通过$plainPW = $null清空变量,减少暴露风险。
  • WinSCP支持直接接收SecureString是因为它有专门的API适配,而Unrar仅支持明文密码参数,因此必须做此转换。

内容的提问来源于stack exchange,提问作者Clifford Piehl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:17:45