Professional Documents
Culture Documents
Змінні Масиви і Хеш-таблиці
Змінні Масиви і Хеш-таблиці
ТАБЛИЦІ
РОЗДІЛ 6
СИМВОЛЬНІ РЯДКИ
Усі символьні рядки в PowerShell є об'єктами типу System.string і є послідовністю 32-бітових
символів у кодуванні Unicode. Довжина рядків не обмежена, вміст рядків не можна змінювати
(можна лише копіювати). B PowerShell підтримує чотири типи символьних рядків
РЯДКИ В ОДИНАРНИХ І ПОДВІЙНИХ
ЛАПКАХ
Рядки можуть задаватися послідовністю символів, укладених в одинарні
або подвійні лапки:
Рядки можуть містити будь-які символи (у тому числі символи розриву рядка і
повернення каретки), крім відповідного одиночного закриваючого символу
(одинарної або подвійної лапки). Рядок в одинарних лапках може містити
подвійні лапки і навпаки:
Якщо всередині рядка потрібно помістити символ, що обмежує цей рядок (тобто
одинарну або подвійну лапку), то потрібно написати цей символ двічі поспіль:
Можна також явно вказати тип змінної при визначенні, вказавши у квадратних дужках відповідний
атрибут типу. При цьому вираз, який стоїть у правій частині після знаку рівності, буде перетворено
(якщо це можливо) до цього типу. Наприклад, оголосимо цілочисленну змінну $a і надамо цій змінній
символьне значення, яке можна перетворити до цілого типу:
[float] System.Float
[single] System.Single
Псевдонім типу Відповідний .Net - тип
[regex] System.Text.RegularExpressions.regex
[array] System.Array
[xml] System.Xml.XmlDocument
[scriptblock] System.Manegement.Automation.ScriptBlock
[switch] System.Manegement.Automation.SwitchPazameter
[hashtable] System.Collections.Hashtable
[psobject] System.Manegement. Automation.PSObject
[type] System.Type
СИСТЕМА АДАПТАЦІЇ ТИПІВ
Як неодноразово згадувалося раніше, ядро системи типів PowerShell становить модель
типів .NET. Однак користувачам Windows (особливо системним адміністраторам) доводиться
мати справу і з іншими об’єктними моделями, що підтримуються операційною системою:
COM, WMI, ADSI, ADO і т.д. Насправді, команди PowerShell ніколи не звертаються до об'єктів
на пряму, а використовують спеціальну систему адаптації типів, яка приховує деталі
представлення конкретної об'єктної моделі. Для цього використовується спеціальний об'єкт
Psobject, який є проміжним рівнем між тим чи іншим об'єктом операційної системи та
командою або сценарієм PowerShell. Даний підхід дозволяє однаково звертатися до об'єктів
різних типів, не витрачаючи час на вивчення особливостей роботи з певною об'єктною
моделлю. До кожного виду даних. PowerShell, що підтримуються, в системі є відповідний
адаптер типів. Примірник об'єкта певного типу інкапсулюється в екземпляр відповідного
адаптера типів. Даний екземпляр адаптера типів служить посередником між самим об'єктом та
системою PowerShell
ЗМІННІ СЕРЕДОВИЩА WINDOWS
Крім власних змінних, оболонка PowerShell дозволяє працювати і зі змінними
середовища (або змінними оточення) Windows, кожна з яких зберігається в
оперативній пам'яті протягом усього сеансу роботи операційної системи, має своє
унікальне ім'я, а її значенням є рядок. Стандартні змінні середовища автоматично
ініціалізуються під час завантаження операційної системи. До таких змінних
належать, наприклад. WINDIR, яка визначає розташування каталогу Windows ,
TEMP, яка визначає шлях до каталогу для зберігання тимчасових файлів Windows
АБО PAТН, в якій зберігається системний шлях (шлях пошуку), тобто список
каталогів, в яких система повинна шукати файли або файли спільного доступу, що
виконуються (наприклад, динамічні бібліотеки). Нагадаємо, що в оболонці сmd.exe
працювати зі змінними середовищами можна за допомогою команди set. Ця команда,
виконана без додаткових параметрів, повертає список усіх змінних середовища:
В оболонці PowerShell доступ до змінних
середовища можна отримати через
віртуальний диск Env:. Наприклад,
список усіх змінних середовища
виводиться командлетом dir:
МАСИВИ В POWERSHELL
На відміну від багатьох мов програмування, в PowerShell не потрібно за
допомогою будь-яких спеціальних символів вказувати початок масиву або
його кінець, а також попередньо оголошувати масив. Для створення та
ініціалізації масиву можна просто надати значення його елементам. Значення,
що додаються до масиву, поділяються комою та відокремлюються від імені
змінної (імені масиву) оператором присвоювання. Наприклад, наступна
команда створить масив $а з трьох елементів:
Можна також створити та ініціалізувати масив, використовуючи оператор
діа пазону (..). Наприклад, щоб створити та ініціалізувати масив $b, що
містить значення від 10 до 14, можна виконати таку команду:
ЗВЕРНЕННЯ ДО ЕЛЕМЕНТІВ
МАСИВУ
Як ми бачили, для відображення всіх елементів масиву потрібно просто ввести його ім'я.
Довжина масиву (кількість елементів) зберігається як Length:
Для звернення до певного елементу масиву потрібно вказати його порядковий
номер (індекс) у квадратних дужках після імені змінної. При цьому слід мати
на увазі, що нумерація елементів у масиві завжди починається з нуля, тому для
отримання значення першого елемента потрібно виконати наступну команду:
ОПЕРАЦІЇ З МАСИВОМ
Останній приклад показує, що за умовчанням масиви PowerShell можуть містити елементи різних
типів, тобто поліморфні. Визначимо тип нашого масиву $a:
Отже, змінна $a має тип "масив елементів типу System. Object". Можна створити
масив із жорстко заданим типом, тобто такий масив, який містить елементи лише
одного типу. Для цього, як і у випадку зі звичайними змінними скалярними, необхідно
вказати потрібний тип у квадратних дужках перед ім'ям змінної Наприклад. наступна
команда створить масив 32-розрядних цілих чисел:
Якщо спробувати записати в даний масив значення, яке не можна перетворювати до цілого
типу, то виникне помилка:
Крім звичайних масивів PowerShell підтримуються так звані асоціативні масиви (іноді їх також називають
словниками) - структури для зберігання колекції ключів та їх значень, пов'язаних попарно.
Наприклад, можна використовувати прізвище людини як ключ, а її дату народження як значення. Асоціативний
масив забезпечує структуру для зберігання колекції імен і дат народження, де кожному імені зіставлена дата
народження. Візуально масив асоційованих значень можна подати як таблицю, що складається з двох стовпців, де
перший стовпець є ключем, а другий значенням.
Асоціативні масиви схожі на звичайні масиви PowerShell, але замість звернення до вмісту масиву за індексом, до
елементів даних асоціативного масиву можна звертатися за ключом. Використовуючи цей ключ, PowerShell
повертає відповідне значення із асоціативного масиву. Для зберігання вмісту асоціативного масиву PowerShell
використовується спеціальний тип даних хеш-таблиця, оскільки дана структура даних забезпечує швидкий
механізм пошуку. Це дуже важливо, оскільки основним призначенням асоціативного масиву є забезпечення
ефективного механізму пошуку
На відміну від звичайного масиву для оголошення та ініціалізації хеш-таблиць
використовуються спеціальні літерали:
$назва_масиву = @{ключ1=елемент1;ключ2=елемент; …}
Отже, кожному значенню хеш-таблиці потрібно присвоїти мітку (ключ), перел перерахуванням
вмісту масиву потрібно поставити символи ?(, а завершити перерахування елементів символом).
Ключі та значення поділяються знаком рівності (-), пари "ключ-значення" поділяються між
собою крапкою з комою (;)
Створимо, наприклад, хеш-таблицю, в якій будуть зберігатися дані про людину (асоціативний
масив з трьома елементами):
Тепер потрібно навчитися звертатися до його елементів. PowerShell
доступ до хеш-таблиць можливий двома способами: з використанням
нотації властивостей або нотації масивів. Поводження з використанням
нотації властивостей виглядає наступним чином:
При цьому підході хеш-таблиця сприймається як об'єкт: ви вказуєте ім'я потрібної якості і
отримуєте відповідне значення. Звернення до асоціативного масиву з використанням нотації
масивів відбувається так:
Працюючи з хеш-таблицею як із масивом можна отримувати значення
відразу кількох ключів. Базовим типом для асоціативних масивів
PowerShell є тип System.Collections.Hashtable:
У даному типі визначено кілька властивостей і методів, які можна використати (нагадаємо, що
повний список властивостей і методів можна отримати за допомогою командлета Get-Member).
Наприклад, у властивостях кeys і Values зберігаються всі ключі та всі значення відповідно:
ОПЕРАЦІЇ З ХЕШ-ТАБЛИЦЬОЮ
Давайте навчимося додавати елементи в хеш-таблицю, змінювати та
видаляти їх. Додамо в хеш-таблицю фоає дані про вік людини і місто, де він
проживає:
Таким чином, додаються елементи асоціативний масив за допомогою
простого оператора присвоєння з використанням нотації властивостей або
масивів. Тепер змінимо значення наявного в масиві ключа. Робиться це
також за допомогою оператора присвоєння: