Как сохранить результаты из столбца для переменной цикла в виде массива - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть несколько строк в таблице с одним столбцом с именем «query_server».

Команда Invoke_ASCmd должна дважды (2 строки) вызываться на разных серверах запросов (называемых 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 >$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 голосов
/ 18 сентября 2018

Массив должен быть инициализирован вне цикла 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++
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...