Особливості роботи з масивами в PowerShell.
Зазвичай масив являє собою набір компонентів (елементів масиву), розташованих один за одним в певному порядку. Кожен елемент масиву має свій порядковий номер, а доступ до елементів масиву здійснюється за допомогою індексації, тобто за посиланням із зазначенням номера (індексу) потрібного елемента.Але масив не обов'язково повинен складатися з кількох елементів, він може включати в себе тільки один елемент або взагалі бути порожнім.
При роботі з масивами необхідно пам'ятати про те, що за замовчуванням PowerShell намагається самостійно визначити тип даних. Для прикладу візьмемо змінну і помістимо в неї кілька чисел, а потім перевіримо тип даних в змінної:
$ a = 1, 2, 3
$ a.GetType ()
Як бачите, в даному випадку ми отримуємо масив (System.Array). Але якщо в змінну помістити одне значення, то PowerShell не формуватиме масив:
$ b = 1
$ a.GetType ()
Як видно з прикладу, PowerShell визначає тип даних в змінної в залежності від кількості об'єктів.Але ми не завжди можемо точно сказати наперед, скільки об'єктів буде отримано в результаті виконання тієї чи іншої команди, тому необхідно мати код, який буде завжди розглядати результат як масив.
Зробити це можна різними способами, наприклад за допомогою оператора ",".Якщо кома використовується як бінарний оператор, то створюється звичайний масив, а якщо як унарний - то масив з одним елементом. Наприклад так отримаємо масив, що складається з одного елемента:
$ b =, 1
Можна явно вказати тип даних у змінній, не даючи PowerShell простору для фантазії, наприклад так:
[object []] $ b = 1
Тут треба згадати, що кожен елемент масиву також має свій тип даних, а тип object [] дозволяє додавати в масив будь-які об'єкти.При необхідності можна обмежити члени масиву певним типом даних (збірний масив). Наприклад можна вказати в якості елементів масиву тільки цілочисельні значення:
[int32 []] $ b = 1
А так ми визначимо як члени масиву системні процеси:
[System.Diagnostics.Process []] $ b = Get-Process
Також створити масив можна за допомогою оператора подвираженія масиву "@", який формує масив в будь-якому випадку, навіть при повній відсутності об'єктів. Дуже зручно спочатку ініціалізувати змінну як масив, а потім додавати в неї потрібні об'єкти, не турбуючись про їх кількість:
$ b = @ ()
$ b = 1
Ну і на завершення ще один спосіб, підглянутий на MSDN.Його суть в тому, що об'єкти передаються по конвеєру спеціальної функції, яка перетворює їх в масив. Виглядає приблизно так:
function Out-Array {begin {$ out = @ ()}; process {$ out + = $ _}; end {return, $ out}}
$ b = 1 | Out-Array
Спосіб не самий прямий і не найшвидший, але цілком робочий.
.