Добавление к массиву в цикле ForEach-Object

Я столкнулся со странной проблемой при попытке добавить в массив из цикла ForEach-Object, который проходит через другой массив.

У меня есть попытался воссоздать проблему как можно короче:

$InputObject1 = @{
    Property = '123456';
}

$InputObject2 = @{
    Property = '654321';
}

$InputArray = $InputObject1, $InputObject2


$OutputObject = @{
    TargetArray = '';
} 

$InputArray | ForEach-Object {
    Write-Output $_.property
    $OutputObject.TargetArray += $_.property
}

Write-Output "Testing Array Readback" 
Write-Output $OutputObject.TargetArray[0]
Write-Output $OutputObject.TargetArray[1]

Я получаю следующие выходные данные:

123456
654321
TESTING Array Readback
1
2

Однако результат, который я пытаюсь достичь , следующий:

123456
654321
TESTING Array Readback
123456
654321

По какой-то причине, хотя значение $ _. property различается на каждой итерации цикла; Значение, записываемое в $ OutputObject. TargetArray , похоже, почти каким-то странным рекурсивным образом пересекает значение первой итерации.

Я все еще новичок в написании сценариев PowerShell, поэтому приношу свои извинения, если где-то сделал действительно очевидную ошибку или предположение. Этот полностью поставил меня в тупик. Заранее спасибо!


РЕДАКТИРОВАТЬ: Решение найдено.

Благодаря вкладу @LotPings я понял, в чем проблема. Мое определение TargetArray в $ OutputObject было неверным.

Я неправильно написал:

$OutputObject = @{
    TargetArray = '';
}

Это означает, что строка:

$OutputObject.TargetArray += $_.property

... фактически объединяет два значения вместе в результате получается "123456654321". В отличие от добавления значения в массив, такого как {123456, 654321}.

Хеш-таблица $ OutputObject должна быть определена как:

$OutputObject = @{
    TargetArray = @();
}

Это приводит к желаемому результату.

0
задан 3 May 2018 в 19:35
1 ответ

$ InputArray и $ OutputObject обе являются хэш-таблицами,
посмотрите, что они содержат:

> $InputArray

Name                           Value
----                           -----
Property                       123456
Property                       654321

> $OutputObject

Name                           Value
----                           -----
TargetArray                    123456654321

И подумайте, как это могло произойти.

2
ответ дан 4 December 2019 в 13:26

Теги

Похожие вопросы