You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:30:05