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)
编辑以包括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,马特