【问题标题】:Powershell - passing variable into loop for string with quotesPowershell - 将变量传递给带引号的字符串循环
【发布时间】:2021-08-09 17:49:53
【问题描述】:

我试图了解如何设置我的脚本,以便单引号将环绕我的变量。我有一个 1500 个客户的列表,我需要为其重复我的脚本,所以我想做一个 foreach 循环。

$customerlist = Invoke-Sqlcmd -Query "SELECT [CustomerNo] FROM [TABLE]" -ServerInstance "SERVER\INSTANCE"
#Loop through 
foreach ($customer in $customerlist)
{
    $inputParams = @{
      "CustomerNo" = "'"+$customer+"'";
    }
....Do rest of script
}

我需要 $inputparams 中的 $customer 变量以单引号中的字符串值显示,例如'01233456' 而不仅仅是 0123456。我已经尝试了几种不同的 "'"+$customer+"'" 迭代,但似乎无法获得正确的语法。有人可以帮帮我吗?

【问题讨论】:

  • 看起来不错。是你失去了领先的0吗?你是从invoke-sqlcmd 取回整数还是字符串。如果没有看到更多“执行其余脚本”,就很难判断您在哪里遇到问题。 "'"+$customer+"'" 应该做你想做的或"'$customer'"
  • @Daniel 我脚本的其余部分是将 SSRS 报告打印为 PDF。我将 CustomerNo 作为参数传递给报告,以便 SSRS 一次只运行 1 个客户。如果我将客户 # 硬编码到 PowerShell 中,"CustomerNo" = '0123456';它运行得很好。但是使用初始查询中的 $customer 值(即使我将查询修改为列出 1 个结果)似乎会破坏脚本。
  • 作为另一种方法...看看-f字符串格式运算符。 this >>> -f 格式运算符 - PowerShell - SS64.com — ss64.com/ps/syntax-f-operator.html

标签: powershell


【解决方案1】:

Invoke-Sqlcmd 返回[System.Data.DataRow] 类型的对象,其中字段名称和查询结果的值作为其属性(基本上是一个表)。要选择 CustomerNo 中的值,您必须按名称指定值:

# Expand the CustomerNo property to strings
foreach ($customer in $customerlist.CustomerNo) { }

# Or, later in the script:
$inputParams = @{
  CustomerNo = "'$($customer.CustomerNo)'"
}

【讨论】:

  • @Capt.Whale 现在看来可以工作了!我的用户添加了将报告放入他们自己的文件夹的请求。 “稍后在脚本中”我设置 t$baseFolder = "\\NetworkShare\CustomerReports\" 。我如何从 $customerlist 中获取“SalesPerson”。我试过了; $baseFolder = "\\NetworkShare\CustomerReports\"+$Customerlist.SalespersonNo+"\" 但它正在创建一个包含所有 SalesPersons 名称的文件夹,而不是每个文件夹 1 个。
  • @Capt.Whale :忽略前面的,我在又一个小时的修补后让它工作了。
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 2014-04-13
  • 1970-01-01
  • 2014-01-01
相关资源
最近更新 更多