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

PowerShell使用凭据以其他用户身份执行脚本时密码读取为空故障排查

PowerShell跨用户执行密码解密失败修复方案

故障根因

你导出密码时使用的ConvertFrom-SecureString默认采用当前用户的DPAPI加密密钥对密码加密,生成的密文只能由导出该密码的用户、在导出密码的同一台设备上解密,其他用户、其他设备读取该密文后都无法正常解密为有效SecureString,因此$password变量为空或无效。

修复方案

方案1:使用独立AES密钥加密解密(跨用户、跨设备通用)

这种方案不受用户、设备限制,适合共享路径下的密码文件使用。

步骤1:生成AES密钥和新的密码文件

在有权限的设备上执行以下代码生成密钥文件和加密后的密码文件:

# 生成256位AES密钥,保存到共享路径,注意控制该密钥文件的访问权限
$key = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($key)
$key | Out-File "$root\aes.key"

# 用该密钥加密密码后导出
(Get-Credential).Password | ConvertFrom-SecureString -Key $key | Out-File "$root\pwd.txt"

注意:务必严格限制aes.key文件的访问权限,仅允许需要调用该脚本的用户读取,避免密钥泄露导致密码明文被破解。

步骤2:修改现有脚本中的解密逻辑

把原来获取$password的代码替换为以下内容:

# 先读取AES密钥,再用密钥解密密文
$key = Get-Content "$root\aes.key"
$password = Get-Content "$root\pwd.txt" | ConvertTo-SecureString -Key $key

方案2:保持DPAPI加密,调整导出密码的上下文

如果仅需要在特定单台设备上运行该脚本,可以用运行脚本的目标用户身份登录那台设备,重新执行你原来的导出密码命令,这样该用户登录该设备时就能正常解密密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:06:04