如何在PowerShell中将具有美元符号的变量传递给另一个变量?

时间:2018-08-20 00:06:57

标签: powershell azure-devops

我正在使用本地服务器运行VSTS构建/发布。 当前,我正在尝试将VSTS中的变量:$(password)传递给脚本。 假设此变量$(password)的值为'stringwith $ sign'

此变量$(password)需要注入到脚本中的字符串中: $ string =“我需要从VSTS的“ $(password)”处注入我的密码字符串” 字符串应如下所示: $ string =我需要从VSTS的“ stringwith $ sign”注入密码字符串

我该如何实现?如果我简单地将其添加为$(password),则构建/发行将失败,因为它认为“ stringwith $ sign”中的$ sign是变量。我什至不能使用''引号,因为我的变量$ {password)需要插入$ string中。

3 个答案:

答案 0 :(得分:0)

在没有看到任何示例代码的情况下,很难说出脚本的工作方式。

但是,基本上,如果您设置的字符串文字包含特殊字符,则可以使用单引号而不是双引号阻止它们被解析。例如,如果您执行

$password = "stringwith$sign"
$password

然后,密码的值为stringwith

这是因为powershell解析了字符串并将$ sign视为变量的名称,并试图插入$ sign的值。但是由于未声明$ sign,因此使用了空字符串的默认值。

但是,如果您使用单引号,即

$password = 'stringwith$sign'
$password

然后,密码的值为stringwith$sign

随后设置

$string = "I need to inject my password string from VSTS here ""$password""" 

赋予$ string

的值

I need to inject my password string from VSTS here "stringwith$sign"

答案 1 :(得分:0)

您还可以使用格式运算符:

$myVar = 'okay$dollar'
'My string with my var {0} inside' -f $myVar

Get-Variable

$myVar = 'okay$dollar'
"My string with my var $(Get-Variable myvar | select -expandproperty value) inside"

答案 2 :(得分:0)

您只需要使用格式 ${env:password} 而不是$(password)来获取可变密码的值。

就像使用以下脚本添加PowerShell任务一样:

$string="I need to inject my password string from VSTS here ${env:test}" 
echo $string

然后它将在构建日志中显示I need to inject my password string from VSTS here stringwith$sign