Я столкнулся со странной проблемой при попытке добавить к массиву из цикла 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
Почему-то, хотя значение $ _. свойство на каждой итерации цикла различается; Значение, записанное в $ OutputObject.TargetArray почти кажется, проходит через значение первой итерации каким-то странным рекурсивным образом.
Я все еще новичок в написании сценариев PowerShell, поэтому приношу свои извинения, если где-то сделал действительно очевидную ошибку или предположение. Этот полностью поставил меня в тупик. Заранее спасибо!
РЕДАКТИРОВАТЬ: Решение найдено.
Благодаря вкладу @LotPings я понял, в чем проблема. Мое определение TargetArray в пределах $ OutputObject было неверно.
Я неправильно написал:
$OutputObject = @{
TargetArray = '';
}
Что означает строку:
$OutputObject.TargetArray += $_.property
... фактически объединяет два значения вместе, в результате чего получается '123456654321'. В отличие от добавления значения в массив, например {123456, 654321}.
В $ OutputObject Поэтому хеш-таблицу следует определять как:
$OutputObject = @{
TargetArray = @();
}
Это приводит к желаемому результату.
$InputArray и $OutputObject обе хэш-таблицы,
посмотрите, что они содержат:
> $InputArray
Name Value
---- -----
Property 123456
Property 654321
> $OutputObject
Name Value
---- -----
TargetArray 123456654321
И подумайте, как это могло произойти.