PowerShell here-字符串中的变量必须在哪里初始化?

Val*_*Val 3 powershell heredoc

我有一个相当复杂的SQL查询,我想在PowerShell脚本中的here-string中使用.在查询中,我想用PowerShell变量替换某些值.我试图准确理解我需要声明和初始化将在here-string中使用的变量.

简化示例:

$SqlQuery = @"
update MyTable 
set foo = $bar
where baz = $quux
"@

...

foreach ($part in $parts) {
    $bar = $part[0]
    $quux = $part[1]

    Run-SqlNonQuery $SqlQuery    #Run-SqlNonQuery is a funct. that executes the query
}
Run Code Online (Sandbox Code Playgroud)

我在顶部声明了here-string,它引用了一些PowerShell变量,$ bar和$ quux,每次循环都会改变.

但是,当我运行脚本时,我遇到了错误.当我运行SQL跟踪时,PS脚本中没有出现PowerShell变量的值.

在像这样的here-string中调用时,PowerShell变量是否被插值?我是否需要将整个here-string 放在变量初始化的循环中?对于这样的事情,正确的结构是什么?

我在Windows 7,.Net 4,VS2010上运行PowerShell.我不清楚这个版本; $Host回报

Name             : PowerConsole
Version          : 1.0.30222.0
Run Code Online (Sandbox Code Playgroud)

但是$PSVersionTable回归

PSVersion             2.0                                                      
PSCompatibleVersions  {1.0, 2.0}
BuildVersion          6.1.7601.17514
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 5

编辑以包括Mark的建议 假设您将数组的顺序部分与{x}等使用的顺序匹配.

$SqlQuery = @"
update MyTable 
set foo = {0}
where baz = {1}
"@

...

foreach ($part in $parts) {
    Run-SqlNonQuery $SqlQuery -f $part    #Run-SqlNonQuery is a funct. that executes the query
}
Run Code Online (Sandbox Code Playgroud)

原始版本

这应该做的工作

$SqlQuery = @"
update MyTable 
set foo = {0}
where baz = {1}
"@

...

foreach ($part in $parts) {
    $bar = $part[0]
    $quux = $part[1]

    Run-SqlNonQuery $SqlQuery -f $bar, $quux     #Run-SqlNonQuery is a funct. that executes the query
}
Run Code Online (Sandbox Code Playgroud)

如果你想要更多信息谷歌"powershell字符串格式"

HTH,马特