首页 > 解决方案 > 如何添加值包含 $ 符号的变量?

问题描述

再会,

我有一段代码连接到 ESXi 服务器并检索一些信息。现在我有一个问题,我在很多不同的 ESXi 上远程运行它。这意味着我的密码是脚本中的一个变量 ($env:ESXPassword) .. 但是问题就在这里。当密码中有美元符号时,它会将密码的一部分视为变量,但是当我将其放在单引号中或使用任何其他建议时.. 它不再将 $env:ESXPassword 视为变量,它不会注入正确的密码。我无法将密码本身放入脚本中,因为它只是根据我通过我的 MSP 软件远程运行它的客户而改变。

我希望我只是错过了一些非常明显/合乎逻辑的东西。

到目前为止,我尝试过: - 单引号 - 使用反引号等转义字符对其进行转义 - 让它从文本文件中读取密码(就像测试一样,因为这显然不够安全)

遗憾的是,没有一个选项奏效。

$secureStringPwd = $env:ESXPassword | 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

当它使用 $ 符号输入密码时,它会照此输入。例如 Pa$word 它会给出 $word 不包含任何信息的错误,并说明密码“Pa”是错误的。

我当然希望它看到 Pa$word 作为密码并允许它连接。

编辑:编辑掉一些不需要的引号,从 AdminOfThings 的评论中可以看出

标签: powershell

解决方案


根据与此变量交互的应用程序/可执行文件,转义序列可能会有所不同。PowerShell 转义字符是反引号。如有必要,您可以在代码需要变量内容之前进行字符串替换。以下将替换$PowerShell 转义等效项`$

 $env:ESXPassword.Replace('$','`$')

推荐阅读