Я заметил странное поведение при использовании массивов в блоках сценариев. Следующий код показывает проблему:
$array = @("x", "y")
Write-Host "$($array.GetType().Name)"
Write-Host "$($array.GetType().BaseType)"
$bad = {
$array += "z"
Write-Host "$($array.GetType().Name)"
Write-Host "$($array.GetType().BaseType)"
$array
}
$good = {
$array = $array.Clone()
$array += "z"
Write-Host "$($array.GetType().Name)"
Write-Host "$($array.GetType().BaseType)"
$array
}
& $good
& $bad
Выполнение скрипта приведет к следующему выводу:
Object[]
array
Object[]
array
x
y
z
String
System.Object
z
Скриптблок $bad
работает не так, как я ожидал. Он преобразует массив в строку, но должен просто добавить элемент z
в массив. Если элемент не добавлен, массив можно использовать, как ожидалось.
Я заметил такое поведение в powershell 5.0 и 5.1, но не в ISE. Это баг или кто может объяснить?