PowerShell foreach循环中如何给变量值包裹单引号作为参数
问题根源
Invoke-Sqlcmd返回的$customerlist中每一项都是DataRow类型的行对象,你需要先访问对象的CustomerNo属性才能拿到对应字段的实际值,直接拼接$customer对象会得到类似@{CustomerNo=01233456}的非预期结果。
正确实现
写法1:PowerShell层包裹单引号
这是最常用的处理方式,用字符串插值完成包裹逻辑:
$customerlist = Invoke-Sqlcmd -Query "SELECT [CustomerNo] FROM [TABLE]" -ServerInstance "SERVER\INSTANCE" #遍历客户列表 foreach ($customer in $customerlist) { $inputParams = @{ "CustomerNo" = "'$($customer.CustomerNo)'" } # 调试可加下行验证输出 # Write-Host $inputParams.CustomerNo #后续脚本逻辑 }
如果你习惯用加号拼接,修改后写法如下,也是生效的:
"CustomerNo" = "'" + $customer.CustomerNo + "'"
写法2:SQL查询层直接完成包裹
也可以在SQL语句中用单引号转义规则,直接输出带单引号的结果:
# SQL中两个连续单引号会转义为一个单引号输出 $customerlist = Invoke-Sqlcmd -Query "SELECT '''' + [CustomerNo] + '''' AS CustomerNo FROM [TABLE]" -ServerInstance "SERVER\INSTANCE" foreach ($customer in $customerlist) { $inputParams = @{ "CustomerNo" = $customer.CustomerNo } #后续脚本逻辑 }
内容的提问来源于stack exchange,提问作者MattC
相关产品推荐
相关产品推荐

