Як створювати об'єкти в PowerShell

Виявив, що пошукові системи рунета видають в основному застарілі методи типу add-member. Як створювати об'єкти, чому саме так і навіщо це треба в перекладі від гуру PowerShell. Ви ознайомитеся з прийомом створення об'єкта з хеш-таблиць, і дізнаєтеся кілька трюків по роботі з ними.

PowerShell in Depth

Розділ 21.1 Техніка номер 1. Використання хеш-таблиць для створення кастомних об'єктів.

Давайте почнемо прийому яким зазвичай ми користуємося самі, коли нам потрібно створити свій власний об'єкт або об'єднати інформацію з різних об'єктів в один для подальшого виводу. Ми називаємо цей шлях офіційним, або рекомендованим. Ми користуємося саме їм, тому що він дозволяє легко писати код, добре читаємо і в кінцевому підсумку дозволяє зробити швидше свою роботу.
Цей спосіб продемонстрований у лістингу 21.2 нижче

# Збираємо якісь дані, що в подальшому нам потрібно це скомпонувати і вивести
$os = Get-WmiObject –Class Win32_OperatingSystem –comp localhost
$cs = Get-WmiObject –Class Win32_ComputerSystem –comp localhost
$bios = Get-WmiObject –Class Win32_BIOS –comp localhost
$proc = Get-WmiObject –Class Win32_Processor –comp localhost |
Select –First 1

# Хеш таблиця. Описує властивості майбутнього об'єкта
$props = @{OSVersion=$os.version
Model=$cs.model
Manufacturer=$cs.manufacturer
BIOSSerial=$bios.serialnumber
ComputerName=$os.CSName
OSArchitecture=$os.osarchitecture
ProcArchitecture=$proc.addresswidth}

# Створюємо об'єкт з хеш таблиці і виводимо
$obj = New-Object –TypeName PSObject –Property $props
Write-Output $obj


виконавши цей код ви отримаєте результат подібний цьому:

Manufacturer : Microsoft Corporation
OSVersion : 6.3.9600
OSArchitecture : 64-bit
BIOSSerial : 036685734653
ComputerName : RSSURFACEPRO2
Model : Surface Pro 2
ProcArchitecture : 64


Т. к. на виході у вас об'єкт має більше чотирьох властивостей PowerShell зробив висновок на екран у вигляді списку. Ви могли б виконати

Write-Output $obj | ft


щоб отримати таблицю. Зверніть увагу, справа в тому, що ви створили один об'єкт, шляхом об'єднання інформації з чотирьох об'єктів. Ви зробили це шляхом створення хеш таблиці до якої прописали бажані імена властивостей, значеннями для них стали значення властивостей інших об'єктів. Це те що ви зробили в хеш таблиці вказуючи:

Manufacturer=$cs.manufacturer


Якщо помістити запису хеш-таблиці на одному рядку, вам потрібно буде відокремити кожне властивість крапкою з комою. Якщо помістити кожне властивість на окремому рядку, вам не потрібна крапка з комою, вам набагато легше читати і правити код.
Дужки з прешедствующим їм знаком @ кажуть що далі починається хеш-таблиця. Т. к. таблиця знаходиться в змінній $props її легко передати в параметрах -property нового об'єкта. Об'єкт PSObject спеціально передбачений для цих цілей.

Перевага цього підходу в тому що легко побудувати хеш таблицю на льоту і створити з неї багато об'єктів. Ви можете помітити, що у вихідному об'єкті властивості мають не той же самий порядок, як вони були визначені в таблиці. Одне з можливих рішень — створити форматування для кастомного об'єкта (спеціальний XML файл описує як виводити на екран, в якому порядку тощо) або, якщо ви використовуєте powershell 3 і вище, то можна використовувати властивість ordered

$props = [ordered]@{ OSVersion=$os.version
Model=$cs.model
Manufacturer=$cs.manufacturer
BIOSSerial=$bios.serialnumber
ComputerName=$os.CSName
OSArchitecture=$os.osarchitecture
ProcArchitecture=$proc.addresswidth}


Все інше теж саме. Тепер властивості об'єкта будуть відображатись в тому порядку, як вони були записані. Якщо ви передасте $obj Get-Member, ви побачите що це PS-CustomObject.

Примітка PowerShell за замовчуванням не відстежує порядок елементів в хеш таблиці. Ось чому коли ви бачите остаточний висновок його властивості йдуть не в тому порядку в якому ви їх створювали. Починаючи з PowerShell 3 ви можете виправити це використавши атрибут [ordered]. Це створює впорядкований словник (інша назва хеш-таблиць) і підтримує порядок елементів в ній.

Додам від себе.
Дійсно цей спосіб дуже зручний: легко читається, легко правити. Цей спосіб широко використовується в PowerShell — від створення параметрів для відправки листа по SMTP, для об'єднання в один об'єкт інформації для виведення з функції або скрипту.

Джерело: Хабрахабр
  • avatar
  • 0

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.