Powershell: як працювати з програмою, створювати, запускати та змінювати скрипти

Не один рік минув з моменту виходу Windows 7 і Server 2008. Програмісти, системні адміністратори та просунуті користувачі знайшли безліч застосувань синього віконця, схожого з командним рядком. Початківці ж юзери, в більшості своїй навіть не знають, що таке PowerShell (PS). А адже скрипти для PowerShell дозволяють автоматизувати, без малого, 100% дій і сценаріїв, що виконуються в операційній системі, за допомогою командного рядка і графічного інтерфейсу. З основними можливостями цієї програми і ознайомимося, більше уваги приділивши функції створення та запуску скриптів (мікропрограм).

Керівництв і документації по програмі існує незліченна кількість. Завдання статті – дати користувачеві концептуальні знання, ввести в курс справи, чи варто ближче знайомитися з інтерпретатором і виконанням скриптів в ньому, вирішить кожен самостійно.

Що являє собою Windows PowerShell?

PowerShell – інтерпретатор командного рядка CMD на основі .NET Framework, наділений власною мовою сценаріїв. Перше означає, що він працює в текстовому режимі: вводиш, запускаєш команду, а на екрані бачиш результат її виконання. Як це було в MS-DOS і старих версіях UNIX’а. Друге значно спрощує, прискорює і автоматизує адміністрування, обслуговування систем, програм, процесів і пов’язаних з ними сервісів адміністраторами та простими користувачами.

Для роботи PowerShell з Vista, XP і більш старих редакцій Windows, якщо їх хтось використовує, можна встановити пакет Windows Management Framework.

Порівняно з іншими інтерпретаторами, PS відрізняється:

  • інтеграцією з .NET Framework – дозволяє створювати потужні скрипти, впроваджуючи в них програмний код;
  • всі дані що повертаються, є об’єктами, а не даними текстового/рядкового типу (string), що передбачає їх передачу іншим скриптам і будь-яку обробку.

PowerShell другої версії має наступні можливості, частину з яких розглянемо детальніше:

  • Можливість подання команд у вигляді командлетів – їх запуск здійснюється всередині інтерпретатора, в іншому випадку команда виконується в окремому процесі.
  • Використання конвеєрів – призначені для передачі даних з однієї команди в іншу зі збереженням їх структури та типу.
  • Інтегрована багатопотокова передача даних по мережі з установкою пріоритетності та відновленням з’єднання.
  • Підтримка позиційних та іменованих параметрів.
  • Фонова робота – асинхронний виклик команд і запуск скриптів на віддалених машинах.
  • Установка обмежених сесій з віддаленими клієнтами та виконання сценаріїв на них.
  • Модулі – спосіб організації скриптів, коли вони стають самодостатніми, та виконуються у власному контейнері, не впливаючи на оточення модуля.
  • Наявність обробника помилок.
  • Графічне середовище для мови: синтаксис, відладчик, підсвітка, автоматичне завершення команд з підтримкою Юнікод і закладок.
  • Додавання точок переривання в рядки, команди, операції та змінні, для налагодження сценарію.
  • Блокові та підрядкові коментарі.
  • Підтримка створення аліасів для деяких командлетів, які перетворюються у звичайні команди в момент виконання.
  • Створення обмежених сесій, де можна виконувати строго заданий перелік команд і дуже багато іншого.

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

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

Командлети

Командлети – своєрідні команди PS, за якими ховаються різні функції. Вбудовані в інтерпретатор команди реалізовані за принципом «дієслово-іменник», наприклад, Get-Process (отримання списку процесів). Таке рішення дозволяє розуміти суть команди вже з її назви (англійською мовою).

Частина командлетів підтримує отримання/передачу даних і масивів інформації, зі збереженням їх структури та типу. Це працює за принципом конвеєра (мова про це піде у наступному розділі). Незважаючи ні на що, командлети запускаються та обробляють об’єкти строго порядку.

Для реалізації командлетів можуть використовуватися будь-які підтримувані .NET API, створені на будь-який з .NET мов. Таким чином юзеру надається доступ до специфічних функцій програми. Командлети вміють експлуатувати API для отримання доступу до необхідної інформації безпосередньо, або через унікальні шляхи (букви дисків і шляхи до теки). За допомогою командлетів можна працювати з реєстром Windows, об’єктами файлової системи і сховища сертифікатів, встановленими додатками та службами.

Конвеєр

При створенні не дуже примітивних сценаріїв, або для виконання будь-яких операцій з даними, отриманими в результаті роботи скрипта, деколи доводиться також здійснювати якісь дії. Для цього існує конвеєр. Як і в UNIX, він об’єднує команди, шляхом передачі вихідних даних однієї команди, у вхідні для іншої в незмінному вигляді, зберігаючи свій тип. При цьому не потрібні ніякий контейнер або посимвольний розбір інформації.

В склад переданої інформації може входити і функція. Після закінчення роботи об’єднаних команд викликається функція перетворення інформації у текстовий вигляд (конвертація даних в рядкові) із застосуванням форматування тексту.

Скрипти

Незважаючи на те, що оболонка дозволяє автоматизувати багато дій, вводити команди потрібно вручну, як і у випадку з командним рядком, що не дуже зручно. Особливо, коли одні й ті ж операції слід виконувати постійно.

Та й без людського фактора не обійтися: помилки, випадково заторкнуті клавіші, при написанні строчок коду, виправлення або набір рядка, заново вимагають більш дружнього ставлення до користувача. Для виконання одноманітних ланцюжків дій PS реалізовані сценарії – текстові файли з послідовністю зрозумілих для інтерпретатора команд всередині.

Скрипти в PowerShell ще більше спрощують і автоматизують роботу за ПК і його обслуговування, особливо, якщо в сценарії присутні розгалуження, умови, логічні операції та цикли. Але тут “не все золото, що блищить”: написати власний сценарій або завантажити готовий (нехай і трохи підігнавши його під власні цілі) так просто не вийде. Якщо б у Microsoft це дозволили, скільки б лиха наробили скрипти для PowerShell, написані шахраями та недоброзичливцями в корисливих або хуліганських цілях.

Для виконання макросу в Windows PS необхідно пройти контроль його запуску. Якщо він не пройдений, а скрипт повинен виконатися, доведеться змінити конфігурацію макросів, що відповідають за безпеку об’єктів.

Перш ніж користуватися скриптами

При експлуатації VBS виникає багато проблем, від яких розробники PowerShell геть позбулися, якщо скриптову безпеку не знижувати для задоволення скриптових запитів користувача, або вирішення завдань, пов’язаних з рівнем захищеності операційної системи. Запуск завантаженного скрипта на машині користувача – простий і дієвий варіант розповсюдження шкідливого програмного забезпечення або крадіжки персональної інформації зловмисниками.

Все відбувається з-за елементарного незнання вмісту скриптового файлу (ps1) та бажання швидше вирішити свої завдання за рахунок праці інших. Об’єкти, що контролюють рівень безпеки виконання сценаріїв, створюють оточення, в якому запустити скрипт неможливо.

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

Оболонка має три рівня безпеки:

  • файли з розширенням ps1 не ідентифікуються системою як такі що виконуються, та позначаються як невідомі або текстові (по подвійному кліку відкриваються у використовуваному на комп’ютері за замовчуванням текстовому редакторі);
  • оболонка дозволяє виконувати скрипти після вказівки до них повного шляху, скриптові файли в поточній директорії не шукаються, роблячи неможливим виконання макросів, розташованих в поточному каталозі;
  • запуск вбудованого скрипта Execution Policy, відповідає за додавання необхідного, в перелік дозволених скриптів.

Навіть не думайте змінювати конфігурацію, знизивши її хоча б до другого рівня, не ознайомившись з основами PowerShell, поки не почнете хоча б поверхово розуміти вміст файлів *.ps1.

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

Налаштувань політики запуску існує цілих п’ять:

  • обмежені – встановлені за замовчуванням, виконуються лише підписані Microsoft сценарії, що дозволяють отримувати інформацію про апаратну та програмну оболонки комп’ютера;
  • мають підпис видалених файлів – виконувати всі макроси можна, але завантажені з інтернету, або надіслані поштою файли повинні бути підписаними;
  • мають цифровий підпис від надійного джерела – виконуються всі підписані сценарії;
  • необмежені – запуск будь-яких макросів;
  • обхідні – призначені для програмістів, які створюють власну систему безпеки, а не використовують представлену в оболонці.

Перевірити поточний стан політики запуску можна командою «Get-ExecutionPolicy». Якою б не була політика безпеки, користувач не зможе запустити скрипт, в якому містяться команди, на виконання яких у нього недостатньо привілеїв.

Запуск PowerShell

Від теорії пора переходити до практики. Отже, для виконання скриптів необхідно отримати цифровий підпис, або знизити політику безпеки (другий варіант простіший). Викликати вікно PowerShell можна кількома шляхами.

Представлений у двох видах:

  • класична консоль;
  • PowerShell ISE – додає підтримку вкладок, синтаксису, контекстної довідки, контекстного та головного меню, що значною мірою полегшує роботу в інтерпретаторі.

Пуск

Найпростіше викликати PS через Пуск.

  • Відкриваємо меню (Windows 7 клікаєм «Всі програми»).
  • Йдемо в каталог Windows PowerShell і клікаєм по потрібній іконці.
Запуск PS через Пуск

Також викликати PS через можна за допомогою інтегрованої пошукової системи.

Запуск PS через пошук

Командний інтерпретатор

Хто любить нестандартні і швидкі способи запуску, скористайтеся вікном «Виконати». Воно відкривається однойменною кнопкою у Пуску і комбінацією клавіш Win+R.

У діалоговому вікні пишемо «powershell» і тиснемо «Enter».

Запуск PS через діалог «Виконати»

Win+X

У Windows 10 PS можна викликати з меню WinX. Справа в тому, що за замовчуванням шляхом кліка по команді «Командний рядок» відкривається CMD. Це можна замінити на PowerShell. Відкриваємо «Властивості Панелі завдань, у вкладці «Навігація» ставимо галочку біля єдиної опції та зберігаємо налаштування.

Можна викликати PowerShell через командний рядок, прописавши в ньому «powershell» або запуском виконуваного файлу по дорозі: %WINDIR%System32WindowsPowerShellv1.0 для 32-бітних систем та за адресою %WINDIR% syswow64WindowsPowerShellv1.0 для 64-розрядних Windows будь-якої редакції.

Запуск PS з каталогу, де зберігається його виконуваний файл

Визначення політики безпеки

Залишилося небагато – дозволити виконання скриптів PowerShell. Прописуємо команду «Set-ExecutionPolicy RemoteSigned» і натискаємо «Y».

Зміна політики виконання

На цьому все. Тепер можете виконувати будь-які команди cmdlet і скрипти. Спробуємо, наприклад, відобразити список активних процесів, виконавши «Get-Process».

Запуск скриптів

Створювати сценарії можна в будь-якому текстовому редакторі (краще зупинитися на Win, Notepad++ або подібному, з підтримкою синтаксису або перевірки) або в програмі PowerShell ISE. Остання надає зручний доступ до командлетів, можливості запуску, налагодження та збереження сценаріїв.

Припустимо, що свій перший скрипт ви написали (це отримання переліку запущених процесів), зберегли через меню «Файл», і його потрібно запустити. Робиться це трьома шляхами:

  1. Прописуємо повний шлях до скрипта в PowerShell (або ISE);
  2. Через контекстне меню файлу ps1;
  3. Відкриваємо сценарій в PowerShell ISE і тиснемо F

Важливо, щоб в шляху до файлу були відсутні пробіли!

PowerShell – потужний засіб для спрощення виконання рутинних операцій в Windows 7, Server 2008 і нових. Важлива гідність PowerShell – скрипти і наявність версії програми з графічним інтерфейсом PS ISE. Команди в ній представлені у вигляді командлетів, що зробить можливим ознайомлення з оболонкою і розуміння сенсу кожної команди. Політика безпеки не дасть новачкові нашкодити своєму комп’ютеру отриманими з невідомих джерел скриптами, а режим відладки, створення власних командлетів, функцій та механізм обробки помилок, відкривають перед програмістами, адміністраторами необмежені можливості.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *