如何添加其值包含$符号的变量?

时间:2019-09-09 13:09:57

标签: powershell

美好的一天,

我有一段代码可以连接到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 $单词作为密码并允许它连接。

编辑:删除了一些不需要的引号,如AdminOfThings的注释所示

1 个答案:

答案 0 :(得分:0)

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

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