一个字符串中的两个变量但只解释一个 - PowerShell

Two variables in one string but only interpret one - PowerShell

我正在尝试在 PowerShell 中进行 API 调用。 问题是调用包含一个“$”并且 PowerShell 将其解释为一个变量,并且它还包含一个真正的变量 它看起来像这样:

有没有办法让 $format 不被解释,而 $foo 被解释?

(我需要 $foo 周围的 "")

我已经通过将它分成两个字符串然后将它们加在一起解决了这个问题,但这对我来说似乎很不稳定。

我强烈建议您从多个部分构建您的 uri:

# define base uri
$baseUri = "http://foo.example/bar()"

# define individual query parameters
$queryParameters = [ordered]@{
    '$format' = 'json'
    'filter' = 'id eq "{0}"' -f $foo
}

# concatenate query parameters
$paramString = $queryParameters.GetEnumerator().ForEach({ 
    $_.Key,$_.Value -join '=' 
}) -join '&'

# construct full URL from base + parameter string
$apicall = $baseUri,$paramString -join '?'

$format 周围的 ' single-quotes 将阻止任何变量扩展尝试。

通过使用 ' 定义字符串格式化模板,然后使用 -f 运算符(这将扩展 $foo 申请前)。

这种方法显然需要更多的源代码,但它更容易维护 URI 参数。


如果除 $foo 值之外的所有内容都是静态的,您还可以使用可扩展的 here-string 文字(@" 而不是 @')和 $ 字符,只需使用反引号将其转义:

$apicall = @"
http://foo.example/bar()?`$format=json&filter=id eq "$foo"
"@