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

含$符号的ESXi密码变量在PowerShell脚本中如何正确传递?

解决PowerShell中环境变量传递含$符号密码的问题

这个问题我之前也碰到过——当密码里包含$时,直接用$env:ESXPassword会被PowerShell误判为变量替换,导致密码被截断(比如Pa$word会变成Pa,因为它试图解析不存在的$word变量),而用单引号包裹又会让PowerShell把$env:ESXPassword当成纯文本,没法读取环境变量的实际值。

解决方案:直接读取环境变量原始值

关键是绕过PowerShell的字符串解析,直接获取环境变量的原始内容。可以使用.NET的[Environment]::GetEnvironmentVariable()方法,它会直接从系统环境变量中读取未被解析的原始字符串,完美保留带$的密码。

修改后的代码如下:

# 用.NET方法获取环境变量的原始值,避免$符号被解析
$plainTextPwd = [Environment]::GetEnvironmentVariable("ESXPassword")
$secureStringPwd = $plainTextPwd | ConvertTo-SecureString -AsPlainText -Force
$user = $env:ESXUser
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $user, $secureStringPwd
Connect-VIServer -Server $env:ESXName -Protocol https -Credential $creds

为什么这个方法有效?

  • $env:ESXPassword是PowerShell提供的环境变量快捷访问方式,它会对变量值进行PowerShell语法解析,所以遇到$会触发变量替换逻辑。
  • 而.NET的GetEnvironmentVariable()方法直接读取系统环境变量的原始存储内容,不会执行任何PowerShell语法解析,因此能完整保留包含$的密码字符串。

验证小技巧

如果不确定是否获取到了完整的密码,可以先加一行验证代码:

# 打印原始密码内容,确认是否完整
Write-Host "获取到的密码: $([Environment]::GetEnvironmentVariable("ESXPassword"))"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:28:42