Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості

Історично утиліти командного рядка в Unix-системах розвинені краще, ніж у Windows, проте з появою нового рішення ситуація змінилася.

Windows PowerShell дозволяє системним адміністраторам автоматизувати більшість рутинних завдань. З її допомогою можна змінювати налаштування, зупиняти та запускати сервіси, а також здійснювати обслуговування більшості встановлених програм. Сприймати синє віконце як ще один інтерпретатор команд було б неправильно. Такий підхід не відбиває суті запропонованих корпорацією Microsoft інновацій. Насправді можливості Windows PowerShell набагато ширші: у невеликому циклі статей ми спробуємо розібратися, ніж рішення Microsoft відрізняється від звичних нам засобів.

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості

Основні можливості 

Зрозуміло Windows PowerShell - це в першу чергу командна оболонка з мовою сценаріїв, спочатку створена на основі платформи .NET Framework, а пізніше - на .NET Core. На відміну від оболонок, що приймають і повертають текстові дані, Windows PowerShell працює з класами .NET, у яких є властивості і методи. PowerShell дозволяє виконувати звичайні команди, а також надає доступ до об'єктів COM, WMI та ADSI. У ній використовуються різні сховища, на зразок файлової системи або реєстру Windows, для доступу до яких створено т.зв. постачальники (providers). Варто відзначити можливість вбудовування компонентів PowerShell, що виконуються, в інші додатки для реалізації різних операцій, в т.ч. через графічний інтерфейс. Правильне і зворотне: багато програм для Windows надають доступ до своїх інтерфейсів управління через PowerShell. 

Windows PowerShell дозволяє:

  • Міняти налаштування операційної системи;
  • Керувати службами та процесами;
  • Налаштовувати ролі та компоненти сервера;
  • Встановлювати програмне забезпечення;
  • Керувати встановленим програмним забезпеченням через спеціальні інтерфейси;
  • Вбудовувати компоненти, що виконуються, в сторонні програми;
  • Створювати сценарії для автоматизації завдань адміністрування;
  • Працювати з файловою системою, реєстром Windows, сховищем сертифікатів тощо.

Оболонка та середовище розробки

Існує Windows PowerShell у двох іпостасях: крім емулятора консолі з командною оболонкою є інтегроване середовище сценаріїв (Integrated Scripting Environment – ​​ISE). Щоб отримати доступ до інтерфейсу командного рядка, достатньо вибрати відповідний ярлик у меню Windows або запустити powershell.exe з меню «Виконати». На екрані з'явиться синє віконце, що помітно відрізняється від допотопного cmd.exe. Там є автодоповнення та інші фішки, звичні для користувачів командних оболонок для Unix-систем.

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості

Для роботи з оболонкою потрібно запам'ятати деякі комбінації клавіш:

  • Стрілки вгору та вниз прокручують історію для повтору раніше набраних команд;
  • Стрілка праворуч наприкінці рядка перенабирає попередню команду посимвольно;
  • Ctrl+Home видаляє набраний текст від позиції курсору до початку рядка;
  • Ctrl+End видаляє текст від курсору до кінця рядка.

F7 показує вікно з набраними командами та дозволяє вибрати одну з них. У консолі також працює виділення тексту мишею, копіпаст, позиціонування курсору, видалення, backspace — як ми любимо.

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості
Windows PowerShell ISE є повноцінним середовищем розробки з підтримуючим вкладки та підсвічуванням синтаксису редактором коду, конструктором команд, вбудованим відладчиком та іншими програмістськими радощами. Якщо в редакторі середовища розробки після імені команди написати знак дефіс, ви отримаєте у списку, що випадає, всі доступні параметри із зазначенням типу. Запустити PowerShell ISE можна або через ярлик із системного меню, або за допомогою файлу powershell_ise.exe, що виконується.

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості

Командлети 

У Windows PowerShell з'явилися т.зв. командлети (cmdlets). Це спеціалізовані класи .NET, які закладено різноманітна функціональність. Іменуються вони за принципом «Дія-Об'єкт» (або «Дієслово-Іменник, якщо вам так більше подобається), а розділена дефісом зв'язка нагадує присудок і підлягає пропозиціям природних мов. Наприклад, Get-Help буквально означає "Отримати-Допомога" або в контексті PowerShell: "Показати-Довідку". По суті, це аналог команди man в Unix-системах і мануали в PowerShell потрібно запитувати саме так, а не викликаючи командлети з ключем -help або /?.. Не варто забувати і про онлайн-документацію по PowerShell: у Microsoft вона досить докладна.

Крім Get у командлетах для позначення дій використовуються й інші дієслова (і не тільки дієслова, строго кажучи). У списку нижче ми наведемо кілька прикладів:

Add - Додати;
Clear - Очистити;
Enable - увімкнути;
Disable - Вимкнути;
New - Створити;
Remove - видалити;
Set - Задати;
Start - Запустити;
Stop - Зупинити;
Export - Експортувати;
Import - Імпортувати.

Є системні, користувальницькі та опціональні командлети: у результаті виконання вони повертають об'єкт чи масив об'єктів. До регістру де вони чутливі, тобто. з погляду інтерпретатора команд немає різниці між Get-Help та get-help. Для поділу використовується символ ';', але ставити його обов'язково, лише якщо в одному рядку виконується кілька командлетів. 

Командлети Windows PowerShell групуються в модулі (NetTCPIP, Hyper-V і т.д.), а для пошуку об'єкта та дії існує командлет Get-Command. Показати довідку щодо нього можна так:

Get-Help Get-Command

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості

За промовчанням команда відображає коротку довідку, але в командлети за потреби передаються параметри (аргументи). З їхньою допомогою можна, наприклад, отримати детальну (параметр -Detailed) або повну (параметр -Full) довідку, а також вивести на екран приклади (параметр -Examples):

Get-Help Get-Command -Examples

Довідка Windows PowerShell оновлюється командлетом Update-Help. Якщо рядок команд виходить занадто довгим, аргументи командлета можна перенести на наступний, написавши службовий символ і натиснувши Enter - просто закінчити писати команду на одному рядку і продовжити на іншому не вийде.

Нижче наведемо кілька прикладів поширених командлетів: 

Get-Process - показати запущені у системі процеси;
Get-Service - показати служби та їх статус;
Get-Content - Вивести вміст файлу.

Для командлетів і зовнішніх утиліт у Windows PowerShell, що часто використовуються, є короткі синоніми — аліаси (від англ. Alias). Наприклад, dir - аліас Get-ChildItem. Є в списку синонімів та аналоги команд з Unix-систем (ls, ps тощо), а командлет Get-Help викликається командою help. Повний список синонімів можна переглянути за допомогою командлета Get-Alias:

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості

Сценарії, функції, модулі та мова PowerShell

Скрипти Windows PowerShell зберігаються як звичайні текстові файли з розширенням .ps1. Запустити їх подвійним кліком не можна: потрібно правою кнопкою миші викликати контекстне меню і вибрати пункт "Запустити PowerShell". З консолі доведеться вказати повний шлях до скрипту, або перейти у відповідний каталог і написати ім'я файлу. Запуск сценаріїв також обмежений системною політикою, а для перевірки поточних налаштувань можна використовувати командлет Get-ExecutionPolicy, який видасть одне з таких значень:

Restricted - запуск сценаріїв заборонено (за замовчуванням);
AllSigned - Дозволено тільки запуск підписаних довіреним розробником сценаріїв;
RemoteSigned - Дозволено запуск підписаних та власних сценаріїв;
Unrestricted - Дозволено запуск будь-яких сценаріїв.

Адміністратор має два варіанти дій. Найбезпечніший передбачає підписання скриптів, але це досить серйозне чаклунство — ми розбиратимемося з ним у наступних статтях. Тепер підемо шляхом найменшого опору і змінимо політику:

Set-ExecutionPolicy RemoteSigned

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості
PowerShell для цього доведеться запустити від імені адміністратора, хоча за допомогою спеціального параметра можна змінити політику поточного користувача.

Пишуться скрипти об'єктно-орієнтованою мовою програмування, команди якого називаються за тим самим принципом, що й розглянуті раніше командлети: «Дія-Об'єкт» («Дієслово-Іменник»). Основне його призначення — автоматизація завдань адміністрування, але це повноцінна мова, що інтерпретується, в якій є всі необхідні конструкції: умовний перехід, цикли, змінні, масиви, об'єкти, обробка помилок і т.д. Для написання сценаріїв підходить будь-який текстовий редактор, але найзручніше запустити Windows PowerShell ISE.

У скрипт можна передавати параметри, робити їх обов'язковими, а також задавати значення за промовчанням. Крім того, Windows PowerShell дозволяє створити функції і викликати їх так само, як і командлети: для цього використовується конструкція Function і фігурні дужки. Сценарій з функціями називається модулем і має розширення PSM1. Модулі повинні зберігатися в каталогах, визначених у змінних оточення PowerShell. Подивитися їх можна за допомогою наступної команди:

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

Конвеєри

В останньому прикладі ми використали знайому користувачам оболонок для Unix-систем конструкцію. У Windows PowerShell вертикальна риса також дозволяє передати вихід однієї команди на вхід іншої, але в реалізації конвеєра є і суттєва різниця: мова йде вже не про набір символів або якийсь текст. Вбудовані командлети або функції користувача повертають об'єкти або масиви об'єктів, а також можуть отримувати їх на вході. Як у Bourne shell та його численних послідовниках, у PowerShell за допомогою конвеєра спрощується виконання складних завдань.

Найпростіший приклад конвеєра виглядає так:

Get-Service | Sort-Object -property Status

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості
Спочатку виконується командлет Get-Service, а потім усі отримані ним служби передаються на сортування за якістю Status командлету Sort-Object. У який аргумент передається результат роботи попередньої ділянки конвеєра, залежить від його типу — зазвичай це InputObject. Докладніше це питання буде розглядатися у присвяченій мові програмування PowerShell статті. 

За бажання ланцюжок можна продовжити і передати результат роботи Sort-Object ще одному командлету (виконуватимуться вони зліва направо). До речі, користувачам Windows доступна та звична всім юніксоїдам конструкція для посторінкового висновку: 

Get-Service | Sort-Object -property Status | more

Запуск завдань у фоновому режимі 

Досить часто буває потрібно запустити якусь команду у фоні, щоб не чекати результату її виконання у сесії оболонки. У Windows PowerShell є кілька командлетів на такий випадок:

Start-Job - Запуск фонового завдання;
Stop-Job - Зупинка фонового завдання;
Get-Job - Перегляд списку фонових завдань;
Receive-Job - Перегляд результату виконання фонової задачі;
Remove-Job - Видалення фонової задачі;
Wait-Job - Переведення фонового завдання назад в консоль.

Для запуску фонового завдання ми використовуємо командлет Start-Job і у фігурних дужках вказуємо команду або набір команд:

Start-Job {Get-Service}

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості
Фоновими завданнями Windows PowerShell можна маніпулювати, знаючи їх імена. Для початку навчимося їх відображати:

Get-Job

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості
Тепер покажемо результат роботи завдання Job1:

Receive-Job Job1 | more

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості
Все досить просто.

Віддалене виконання команд

Windows PowerShell дозволяє виконувати команди та сценарії не тільки на локальному, але і на віддаленому комп'ютері і навіть цілій групі машин. І тому існує кілька способів:

  • Багато командлетів мають параметр -ComputerName, але в такий спосіб не вийде, наприклад, створити конвеєр;
  • Командлет Enter-PSSession дозволяє створити на віддаленій машині інтерактивний сеанс; 
  • За допомогою командлету Invoke-Command Ви можете виконувати команди або сценарії на одному або кількох віддалених комп'ютерах.

Версії PowerShell

З моменту першого релізу в 2006 PowerShell серйозно змінився. Інструмент доступний для багатьох систем, що працюють на різних апаратних платформах (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux та OS X. Останній реліз 6.2 випущено 10 січня 2018 року. Написані для більш ранніх версій скрипти з високою ймовірністю працюватимуть у пізніших, а ось із зворотним перенесенням можуть виникнути проблеми, оскільки за роки розвитку PowerShell з'явилася велика кількість нових командлетів. Дізнатися версію встановленої на комп'ютері командної оболонки можна за допомогою властивості вбудованої змінної PSVersion $PSVersionTable:

$PSVersionTable.PSVersion

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості
Також можна скористатися командлетом:

Get-Variable -Name PSVersionTable –ValueOnly

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості
Те саме робиться і за допомогою командлета Get-Host. Насправді варіантів безліч, але для їх застосування потрібно вивчити мову програмування PowerShell, чим ми і займемося наступній статті

Підсумки 

Корпорації Microsoft вдалося створити справді потужну командну оболонку зі зручним інтегрованим середовищем для розробки скриптів. Від звичних нам світу Unix коштів її відрізняє глибока інтеграція з операційними системами сімейства Windows, і навіть із програмним забезпеченням їм і платформою .NET Core. PowerShell можна назвати об'єктно орієнтованою оболонкою, тому що командлети та функції користувача повертають об'єкти або масиви об'єктів і можуть отримувати їх на вході. Думаємо, цим інструментом повинні володіти всі адміністратори серверів на Windows: пройшов час, коли вони могли обійтись без командного рядка. Просунута консольна оболонка особливо необхідна на наших недорогих VPS, які працюють під керуванням Windows Server CoreАле це вже зовсім інша історія.

Що таке Windows PowerShell та з чим його їдять? Частина 1: основні можливості

Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.

Які теми варто в першу чергу торкнутися наступних статей циклу?

  • 53,2%Програмування в PowerShell123

  • 42,4%Функції та модулі PowerShell98

  • 22,1%Як підписувати власні скрипти?

  • 12,1%Робота зі сховищами через постачальників (providers)28

  • 57,6%Автоматизація адміністрування комп'ютерів за допомогою PowerShell133

  • 30,7%Керування програмним забезпеченням і вбудовування компонентів PowerShell, що виконуються, в сторонні продукти71

Проголосував 231 користувач. Утрималися 37 користувачів.

Джерело: habr.com

Додати коментар або відгук