如何将for循环变量中的列结果存储为数组

时间:2018-09-18 06:34:09

标签: sql-server powershell

我在表中有一些行,其中一列称为“ query_server”。

Invoke_ASCmd命令必须在不同的查询服务器(称为Destination_server)上调用两次(2行),如下所示:

    foreach($row in $Table | where { $_.cube_name -match $CUBE -and $_.active -match $Active })
{
    $Destination_Server = $row.Item("query_server")
    $sync_output += "_$Destination_Server.txt"
    Invoke-ASCmd –InputFile $XML_file -Server $Destination_Server >$sync_output

}

我尝试这样做,但是没有用

$i=0
foreach($row in $Table | where { $_.cube_name -match $CUBE -and $_.active -match $Active })
{
    @($Destination_Server) = $row.Item("query_server")
    $sync_output += "_$Destination_Server.txt"
    Invoke-ASCmd –InputFile $XML_file -Server $Destination_Server[$i] >$sync_output
    $i++
}

抛出错误:

  
      
  • @($ Destination_Server)= $ row.Item(“ query_server”)
  •   
  • ~~~~~~~~~~~~~~~~~~~~~~   分配表达式无效。赋值运算符的输入必须是一个能够接受的对象   赋值,例如变量或属性。      
        
    • CategoryInfo:ParserError:(:) [],ParentContainsErrorRecordException
    •   
    • FullyQualifiedErrorId:InvalidLeftHandSide
    •   
  •   

1 个答案:

答案 0 :(得分:0)

必须在foreach循环外初始化数组。否则,它仅在循环的单个实例中可用。

尝试一下:

$i=0
$Destination_Server = @()
foreach($row in $Table | where { $_.cube_name -match $CUBE -and $_.active -match $Active })
{
    $Destination_Server += $row.Item("query_server")
    $sync_output += "_$Destination_Server.txt"
    Invoke-ASCmd –InputFile $XML_file -Server $Destination_Server[$Destination_Server.length -1] >$sync_output
    $i++
}