PowerShell – це потужна командна оболонка та скриптова мова, яка використовується для автоматизації завдань, керування операційною системою та взаємодії з різними службами у середовищі Windows. Якщо ви тільки починаєте свій шлях у світі PowerShell, цей об’ємний посібник надасть вам все необхідне для успішного старту. Вивчення основних понять є ключовим кроком у засвоєнні PowerShell. Вам слід ознайомитися зі структурою команд, змінними, функціями та потоками об’єктів. Вивчення команднихлетів (cmdlets) – основних будівельних блоків PowerShell, допоможе вам розуміти, як ефективно працювати з системою. Використання PowerShell допомагає значно полегшити та прискорити рутинні завдання.
Ви можете створювати скрипти, які виконують повторювані дії, і зосереджуватися на більш складних задачах. Отримайте навички створення та виконання скриптів, які допоможуть вам оптимізувати роботу з системою та збільшити продуктивність. Окрім того, ви дізнаєтесь про інтерфейс командної оболонки, роботу з пайпами (pipelines), фільтрами та сценаріями. Розуміння цих концепцій дозволить вам легше здійснювати складні операції та збирати інформацію з різних джерел. У світі PowerShell можливості безмежні, тому вивчення основних понять – це лише перший крок. Цей посібник допоможе вам отримати прочні фундаментальні знання та навички, що дозволять вам більш ефективно працювати з цією потужною командною оболонкою. Завдяки PowerShell, ви зможете перетворити ваші рутинні завдання на автоматизовані процеси та забезпечити більш продуктивну роботу з вашою операційною системою Windows.
Щоб почати новий сеанс в оболонці PowerShell, можна вибрати Windows PowerShell у меню Пуск. Інший варіант запуску оболонки – натиснути кнопку Виконати в меню «Пуск», ввести ім’я файлу powershe11 і натиснути кнопку ОК.
У результаті відкриється нове вікно стандартної консолі Windows з пропозицією введення команд (мал 3.1).

Якщо ви віддаєте перевагу працювати в Windows Terminal (нагадаємо, що спочатку його потрібно встановити в системі), то сеанс PowerShell з пропозицією ввести команду відкриється за замовчуванням після запуску терміналу (мал 3.2).

Погляньте на пропозицію спробувати новий кросплатформний PowerShell. На момент написання статті (2021) у Windows 10 за замовчуванням встановлено Windows PowerShell версії 5.1, яка базується на специфічному для Windows .NET Framework версії 4.x. Наступні версії PowerShell (шоста та сьома) використовують .NET Core/.NET 5, які можна встановити на Windows, macOS та Linux. Таким чином, PowerShell 6/7 – це нова оболонка (запускати її потрібно командою pwsh, а не powershe11), яка може працювати на різних операційних системах, але встановлювати її потрібно окремо.
Запустимо першу команду в PowerShell і відобразимо вміст поточного каталогу. В оболонці cmd для цього використовується команда dir.exe в оболонці bash – команда 15. Спробуємо запустити ті ж команди в PowerShell (зверніть увагу, що PowerShell обробляє команди в нечутливому регістрі):
PS С:\Users\andrv> dir Каталог: C:\Users\andrv Mode LastWriteTime Length Name d---- 15.02.2021 20:30 .config d---- 10.10.2020 22:02 .dbus-keyrings d---- 11.02.2021 16:12 .local d---- 03.03.2021 20:10 .quokka d---- 11.10.2020 7:48 . ssh d---- 28.09.2020 23:28 .vscode PS С:\Users\andrv> Is d---- 03.03.2021 20:04 .wallaby d-r— 28.09.2020 16:18 3D Objects d-r-- 28.09.2020 16:18 Contacts d----- 01.04.2021 19:41 Documents d-r— 14.05.2021 20:58 Downloads d-r— 28.09.2020 16:18 Favorites d-r— 28.09.2020 16:18 Links d-r— 28.09,2020 16:18 Music dar—1 14.05.2021 20:45 OneDrive d-r-- 28.09.2020 16:18 Saved Games d-r— 28.09.2020 16:18 Searches d-r-- 04.10.2020 23:52 Videos -a--- 18.10.2020 17:20 93 .gitconfig Каталог: C:\Users\andrv Mode LastWriteTime Length Name d---- 15.02.2021 20:30 .config d---- 10.10.2020 22:02 .dbus-keyrings d---- 11.02.2021 16:12 .local d---- 03.03.2021 20:10 .quokka d---- 11.10.2020 7:48 . ssh d---- 28.09.2020 23:28 .vscode d---- 03.03.2021 20:04 .wallaby d-r— 28.09.2020 16:18 3D Objects d-r-- 28.09.2020 16:18 Contacts d---- 01.04.2021 19:41 Documents d-r— 14.05.2021 20:58 Downloads d-r— 28.09.2020 16:18 Favorites d-r— 28.09.2020 16:18 Links d-r— 28.09.2020 16:18 Music dar—1 14.05.2021 20:45 OneDrive d-r— 28.09.2020 16:18 Saved Games d-r— 28.09.2020 16:18 Searches d-r— 04.10.2020 23:52 Videos -a--- 18.10.2020 17:20 93 .gitconfig
Як бачимо, обидві команди спрацьовують однаково, виводячи на екран список файлів та підкаталогів у поточному (домашньому) каталозі, а також додаткову інформацію про них. Оболонки cmd.exe і bash підтримують перенаправлення виведення за допомогою символу > (знак ”більше”) результат виконання команд можна виводити не так екран, а текстовий файл.
Спробуємо зробити те саме в PowerShell:
PS С:\Users\andrv> dir > dir.txt
Ця команда виконалася без жодних повідомлень на екрані. Виведемо тепер на екран вміст файлу dir.txt, скориставшись для цього командою type
PS С:\Users\andrv> type c:\dir.txt Каталог: С:\Users\andrv Mode LastWriteTime Length Name d---- 15.02.2021 20:30 .config d---- 10.10.2020 22:02 .dbus-keyrings d---- 11.02.2021 16:12 .local d---- 03.03.2021 20:10 .quokka d---- 11.10.2020 7:48 . ssh d---- 28.09.2020 23:28 .vscode d---- 03.03.2021 20:04 .wallaby d-r— 28.09.2020 16:18 3D Objects d-r— 28.09.2020 16:18 Contacts d---- 01.04.2021 19:41 Documents d-r— 14.05.2021 20:58 Downloads d-r— 28.09.2020 16:18 Favorites d-r— 28.09.2020 16:18 Links d-r— 28.09.2020 16:18 Music dar—1 14.05.2021 20:45 OneDrive d-r-- 28.09.2020 16:18 Saved Games d-r— 28.09.2020 16:18 Searches d-r— 04.10.2020 23:52 Videos -a--- 18.10.2020 17:20 93 .gitconfig
Отже, початок покладено: ми запустили кілька знайомих команд в новій оболонці і переконалися, що PowerShell підтримує перенаправлення OUTPUT в текстовий файл.
Окрім виконання команд у PowerShell, можна оцінювати вирази, наприклад використовувати оболонку як калькулятор. Наприклад:
PS С: \Users\andrv> 24-3 5 PS С:\Users\andrv> 10-2*3 4 PS С:\Users\andrv> (10-2)*3 24
Як бачите, результат обчислень відразу відображається на екрані, ніяких спеціальних команд для цього використовувати немає необхідності (цю особливість PowerShell варто запам’ятати на майбутнє).
Попередні приклади показують, що PowerShell обробляє обчислення цілочисельних виразів, включаючи дужки. Перевіримо вираз, результатом якого є число з плаваючою комою:
PS С:\Users\andrv> 10/3 3.33333333333333
Тут теж все в порядку, результат розрахований правильно. Насправді, ви можете виконувати більш складні обчислення в PowerShell за допомогою різних математичних функцій. Для цього скористайтеся функцією . NET-k.nacca System.Math. Наприклад, наведена нижче команда обчислює та відображає квадратний корінь числа l69:
PS С:\Users\andrv> [System.Math]::Sqrt(169) 13
У PowerShell можна зберегти результат обчислення виразу у змінній і використовувати цю змінну в інших виразах. Наприклад:
PS С:\Users\andrv> $а = 10/2 PS С:\Users\andrv> $а 5 PS С:\Users\andrv> $а * 3 15
Зазвичай в оболонках всі команди ділилися на внутрішні команди, які розпізнаються і виконуються безпосередньо відповідним інтерпретатором, і зовнішні команди, що представляють собою окремі виконувані модулі. У cmd.exe, наприклад, внутрішні команди включають drr і soru, а зовнішні hsor і багато іншого. Крім того, оболонки підтримують скрипти на мові, що дозволяють виконувати команди в пакетному режимі.
PowerShell підтримує чотири типи команд: командлети, функції, сценарії та зовнішні виконувані файли.
Перший тип команд PowerShell називається командлетами, які є внутрішніми командами PowerShell. Чому таке дивне слово використовується для назви внутрішніх команд? Це тому, що командлети не повністю вбудовані в PowerShell, як внутрішні команди cmd.exe, але їх також не можна запускати за межами оболонки, як звичайні виконувані утиліти. Тому для їх назви був запропонований новий термін.
Командлет – це клас .NET, який походить від базового класу Cmd1et. Єдиний базовий клас, Cmd1et, забезпечує сумісність синтаксису всіх командлетів і автоматизує аналіз параметрів командного рядка та опис синтаксису командлета для вбудованої довідки.
Даний тип команд компілюється в бібліотеку динамічного компонування (DLL) і завантажується в процес PowerShell при запуску оболонки (тобто самі командлети не можуть запускатися як додатки, але містять виконувані об’єкти). Оскільки скомпільований код завантажується в процес оболонки під час запуску PowerShell, цей тип команд виконується найбільш ефективно.
Командлети можна розглядати в деякому роді як аналог внутрішніх команд традиційних оболонок, хоча, на відміну від внутрішніх команд, нові командлети можуть бути додані в систему в будь-який час. Це робить оболонку PowerShell розширюваною оболонкою та дає змогу корпорації Майкрософт та іншим постачальникам програмного забезпечення додавати командлети до оболонки PowerShell для керування своїми застосунками та службами (наприклад, Microsoft SQL Server або Microsoft Exchange).
Командлети можуть бути дуже простими або дуже складними, але кожен призначений для вирішення однієї вузької задачі. Робота з командлетами стає дійсно ефективною, коли ви використовуєте їх композицію, коли об’єкти передаються від одного командлета до іншого (див. Розділ 5 для більш детальної інформації про те, як передавати об’єкти).
Назви командлетів завжди слідують дієслівно-іменниковому шаблону, де дієслово вказує конкретну дію, а іменник однини визначає об’єкт, над яким буде виконана дія ( «об’єкт дії»). Ця умовність значно полегшує запам’ятовування та використання командлетів. Наприклад, використовуйте командлет Get-Process для отримання відомостей про процес, командлет Stop-Service для зупинки запущеної служби, командлет C1ear-Host для очищення екрана консолі тощо.
Дефіс є частиною імені командлета, яке, наприклад, Get-Process не є комбінацією команди Get і команди Process — ім’я повністю складається зі слова Get — Process.
Імена командлетів не враховують регістр. Обидва слова в назві прийнято писати з великої літери для поліпшення читабельності коду, але це не обов’язково.
Під час введення імен командлетів у командному рядку PowerShell можна скористатися автодоповненням. Якщо набрати перші кілька символів і натиснути клавішу <Ta> система буде по черзі підставляти повні назви всіх відповідних командлетів.
Командлети можуть мати параметри, які є елементами, що надають додаткову інформацію. Параметри або визначають елементи, з якими повинна працювати команда, або визначають, як буде працювати командлет. Звернутися до параметрів можна за назвою, якому передує дефіс (-), або за позицією (в останньому випадку інтерпретація параметра буде виконуватися в залежності від його розташування в командному рядку).
Підтримуються три типи параметрів командлета, в загальному випадку синтаксис наступний:
ім’я командлета —parameter1 -parameter2 аргумент 1 аргумент2
Тут –parameter1 — параметр, який не має значення (такі параметри часто називають параметрами),• –parameter2 — ім’я параметра, який має значення аргументу]•, argument2 — параметр, який не має імені (або аргументу). Назви параметрів, як і імена командлетів, нечутливі до регістру та можуть автоматично вводитися під час введення натисканням клавіші <Tab>. Як приклад перемикача розглянемо параметр -Recurse командлета GetChi1dItem.
Перемикач -Recurse, якщо він вказаний, поширює команду не тільки на певний каталог, але і на всі його підкаталоги. Наприклад, наступний командлет відобразить інформацію про всі файли, які знаходяться в каталозі C:\Program Files\lnternet Explorer або в одному з його підкаталогів і мають ім’я, яке задовольняє масці ie* (як бачите, після параметра -Recurse аргумент не вказано):
PS С:\Users\andrv> dir -Recurse -Filter ie* 'C:\Program Files\ Internet Explorer\' Directory: C:\Program FilesMntemet Explorer Mode LastWriteTime Length Name -a--- 12/7/2019 12:09 PM 515072 iediagcmd.exe -a--- 12/7/2019 12:09 PM 504832 ieinstal.exe -a--- 12/7/2019 12:09 PM 224768 ielowutil.exe -a--- 12/7/2019 12:09 PM 421888 IEShims.dll -a--- 12/7/2019 12:47 AM 819136 iexplore.exe Directory: C:\Program FilesMntemet Explorer\en-US Mode LastWriteTime Length Name -a--- -a--- 1/12/2021 11:02 AM 1/12/2021 11:03 AM 2560 ieinstal.exe.mui 5632 iexplore.exe.mui Directory: C:\Program FilesMntemet Explorer\ru-RU Mode LastWriteTime -a--- 12/7/2019 5:34 PM -a--- 12/7/2019 5:34 PM Length Name 2560 ieinstal.exe.mui 6144 iexplore.exe.mui
У цьому прикладі використовується ще один параметр — Filter з аргументом ie *, що задає маску файлів для пошуку. Зазначимо, що імена параметрів не обов’язково вказувати повністю, проте скорочене ім’я має однозначно визначати відповідний параметр.
Наприклад, замість останнього командлета можна виконати наступний скорочений варіант, результат залишиться тим самим: PS С:\Users\andrv> dir -г -fi ie* ‘C:\Program Files\Internet Explorer\‘ Однак якщо спробувати ім’я параметра -Filter скоротити до одного символу, то виникне помилка: PS С:\Users\andrv> Get-Childltem : He вдається обробити параметр, оскільки ім’я параметра f неоднозначне. Можливі збіги: -Filter -Force.
У нашому прикладі є ще один аргумент, що задає шлях до каталогу C:\Program FilesMntemet Exlplorer. Як бачите, параметр для цього аргументу не вказано. Насправді наведена вище команда еквівалентна наступній: PS З:\Users\andrv>dir -г -f ie* -path •С:\Program Files\lntemet Explorer\’ 50 Частина I.
Знайомимося з PowerShell Тобто У даному випадку аргументу ‘C:\Program Files\Internet ExplorerV відповідає параметр , Що ім’я параметра -Path можна опускати – система зможе визначити, що аргумент, що задає шлях до каталогу файлової системи, відноситься саме до цього параметра.
Нагадаємо, що всі командлети є нащадками базового класу Tnd1et, який визначає кілька параметрів, що забезпечують узгоджений, однорідний інтерфейс PowerShell.
Зокрема, деякі параметри, які називаються загальними параметрами, підтримуються всіма командлетами PowerShell (і на певні командлети ці параметри можуть не впливати). Основні загальні параметри наведені в табл. 3.1.
Скажемо кілька слів про параметр -WhatIf з таблиці. 3.1. Цей параметр дозволяє побачити об’єкти, на які вплине той чи інший командлет, не виконуючи самих дій. Наприклад, наступна команда дозволяє побачити, які файли в каталозі C:\Tetra будуть видалені при запуску команди de1 (самі файли не видаляються):
PS С:\> del -Whatlf "С:\temp\*. "С:\temp\xv2p.dll". Whatlf: Выполнение операции "Удаление файла" над целевым объектом "С:\temp\bidiSNMP.dll". Whatlf: Выполнение операции "С:\temp\BiDiSNMP.ini". "Удаление файла" над целевым объектом Whatlf: Выполнение операции "С:\temp\Setup.exe". "Удаление файла" над целевым объектом Whatlf: Выполнение операции "C:\temp\XBASE.DLL". "Удаление файла" над целевым объектом Whatlf: Выполнение операции "С:\temp\XeroxLpr.dll". "Удаление файла" над целевым объектом Whatlf: Выполнение операции "С:\temp\XeroxPM.hlp". "Удаление файла" над целевым объектом Whatlf: Выполнение операции "С:\temp\XPmPrint.ini". "Удаление файла" над целевым объектом Whatlf: Выполнение операции "С:\temp\xrxipdis.dll". "Удаление файла" над целевым объектом Whatlf: Выполнение операции "С:\temp\XSNMX.DLL". "Удаление файла" над целевым объектом Whatlf: Выполнение операции "Удаление файла" над целевым объектом
Параметр -WhatIf може бути особливо корисним у випадках, коли діапазон об’єктів, на які має впливати командлет, неявно визначено (наприклад, за допомогою регулярних виразів).
Щоб переглянути список командлетів, доступних протягом поточного сеансу, запустіть команду Get-Corrnand. Якщо ви запустите Get-Corrnand без параметрів, ви побачите всі доступні команди, включаючи функції та псевдоніми команд. Ви можете відфільтрувати цей список, щоб включити лише командлети, використовуючи такий конвеєр команд (див. Розділ 5 для отримання додаткової інформації про конвеєри):
PS С:\Users\andrv> Get-Command | Where-Object CcmmandType -eq 'Cradlet' | Format-Wide -Column 2 Add-AppvC1i entConnecti onGroup Add-AppvPublishingServer Add-AppxProvisionedPackage Add-Computer Add-History Add-KdsRootKey Add-Member Add-Signe rRu1e Add-AppvClientPackage Add-AppxPackage Add-AppxVolume Add-Content Add-JobTrigger Add-LocalGroupMember Add-PSSnapin Add-Type
Команда Get-C01Mnand має параметри -Verb і -Noun, які дозволяють відображати командлети з певним дієсловом або іменником відповідно. Наприклад, можна побачити, які команди PowerShell можна використовувати для управління процесами, запущеними в системі:
PS С:\Users\andrv> Get-Command -Noun Process| Format-Wide -Column 2 Debug-Process Start-Process Wait-Process Get-Process Stop-Process Следующая команда покажет, какие объекты можно получить с помощью команд с глаголом Get: PS С:\Users\andrv> Get-Command -Verb Get | Format-Wide -Column 2 Get-AdlAnalyticsAccount Get-AdlAnalуticsDataSource Get-AdlCatalogltem Get-AdlJobPipeline Get-AdlStore Get-AdlStoreFirewallRule Get-AdlAnalyticsComputePolicy Get-AdlAnalyticsFirewallRule Get-AdlJob Get-AdlJobRecurrence Get-AdlStoreChildltem Get-AdlStoreltem
Третій тип команд, підтримуваних PowerShell, – це сценарії. Сценарій – це блок коду PowerShell, що зберігається в зовнішньому файлі з розширенням .psl. Синтаксис скрипта аналізується при кожному його запуску.
Скрипти дозволяють працювати з PowerShell в пакетному режимі, тобто заздалегідь створити файл з необхідними командами, визначити логіку роботи за допомогою різних керуючих інструкцій мови PowerShell, і використовувати цей файл в якості виконуваного модуля.
Докладнішу інформацію про сценарії PowerShell дивіться в розділі 9.
Останній тип команди, яку ви виконуєте в PowerShell – це зовнішні виконувані жири, які виконуються операційною системою звичайним способом. Зокрема, ви можете запустити будь-які зовнішні утиліти командного рядка (наприклад, xsoru) з Windows PowerShell, просто вказавши їх імена.
Якщо потрібно запустити файл, ім’я якого містить пробіли (або шлях), візьміть ім’я в одинарні або подвійні лапки та перед іменем додайте амперсанд & (у PowerShell цей символ означає оператора виклику). Наприклад, така команда запустить lnternet Explorer: PS C: \> ” C: \Program Fi1es\Internet exp10rer\iexp10re.exe ‘
Як зазначалося раніше, імена всіх командлетів в PowerShell відповідають шаблону “action object” і можуть бути досить довгими, що ускладнює їх швидкий введення. Механізм псевдоніма, реалізований в PowerShell, дозволяє користувачам запускати команди за альтернативними іменами. У PowerShell є багато псевдонімів, попередньо визначених, і ви можете додати власні псевдоніми в систему.
Наприклад, ми кілька разів використовували команду dir, яка насправді є псевдонімом командлета Get-Chi1dItem. Це можна перевірити за допомогою командлета Get-C0Inand АБО Get-A1ias:
PS С:\Users\andrv> Get-Command dir CommandType Name Alias dir -> Get-Childltem PS C:\Users\andrv> Get-Alias dir CommandType Name Alias dir -> Get-Childltem
Псевдоніми в PowerShell діляться на два типи. Перший призначений для сумісності імен з різними інтерфейсами. Ці псевдоніми дозволяють користувачам, знайомим з іншими оболонками (cmd.exe або bash), використовувати знайомі імена команд для виконання аналогічних операцій в PowerShell. Ego полегшує вивчення нової оболонки, тому вам не доведеться витрачати зусилля на запам’ятовування нових специфічних команд PowerShell.
Наприклад, користувач хоче очистити екран. Якщо у нього є досвід роботи з cmd.exe, то він, природно, спробує виконати команду c1s. Коли ви це зробите, PowerShell автоматично запустить командлет C1ear-Host, для якого c1s є псевдонімом і який виконує необхідну дію очищення екрана.
Для користувачів cmd.exe PowerShell визначає псевдоніми cd, c1s, soru, de1, dir, echo, erase, move, popd, pushd, ren, rmdir, sort, type; ДЛЯ користувачів UNIX-подібних систем – псевдоніми cat, chdir, c1ear, diff, h, history, ki11, 1p, 1s, mount, ps, pwd, r, rm, sleep, tee, write.
Другий тип псевдонімів (стандартні псевдоніми) в PowerShell призначений для швидкого введення команд. Ці псевдоніми походять від імен командлетів, яким вони відповідають. Наприклад, дієслово Get скорочується до d, набір дієслів скорочується до s, іменник Location скорочується до 1 і так далі. Таким чином, командлет Set-Location має псевдонім 51, а командлет GetLocation має псевдонім d1.
Переглянути список усіх заявлених у системі псевдонімів можна за допомогою командлета Get-A1ias без параметрів:
PS С:\Users\andrv> Get-Alias CommandType Name Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin Alias cat -> Get-Content Alias cd -> Set-Location Alias chdir -> Set-Location Alias clc -> Clear-Content Ali as clear -> Clear-Host Alias clhy -> Clear-History Alias cli -> Clear-Item Alias clp -> Clear-ItemProperty Alias cis -> Clear-Host Alias civ -> Clear-Variable Alias cnsn -> Connect-PSSession Alias compare -> Compare-Object Alias copy -> Copy-Itern Alias cp -> Copy-Itern Alias cpi -> Copy-Item Alias cpp -> Copy-ItemProperty Alias curl -> Invoke-WebRequest Alias cvpa -> Convert-Path Alias dbp -> Disable-PSBreakpoint Alias del -> Remove-Item Alias diff -> Compare-Object
Встановити власний псевдонім можна за допомогою командлета Set-Alias або New Aiias. Наприклад, створимо для командлета Get-chiiditem псевдонім list: PS З:\Users\andrv> Set-Alias -name list -value Get-Childltem
Перевіримо, як цей псевдонім працює:
PS С:\Users\andrv> list Каталог: С:\Users\andrv Mode LastWriteTime Length Name d---- 15.02.2021 20:30 .config d---- 10.10.2020 22:02 .dbus-keyrings d---- 11.02.2021 16:12 .local d 03.03.2021 20:10 .quokka d---- 11.10.2020 7:48 . ssh d---- 28.09.2020 23:28 .vscode d---- 03.03.2021 20:04 .wallaby d-r— 28.09.2020 16:18 3D Objects d-r— 28.09.2020 16:18 Contacts d---- 01.04.2021 19:41 Documents d-r— 14.05.2021 20:58 Downloads d-r— 28.09.2020 16:18 Favorites d-r— 28.09.2020 16:18 Links d-r— 28.09.2020 16:18 Music dar—1 14.05.2021 20:45 OneDrive d-r— 28.09.2020 16:18 Saved Games d-r— 28.09.2020 16:18 d-r— 04.10.2020 23:52 -a--- 18.10.2020 17:20 Searches Videos 93 .gitconfig
Декільком псевдонімам може відповідати одна і та ж команді (наприклад, GetChi1dItem відповідає псевдонімам dir і 1s), але один псевдонім не може посилатися на дві команди. Створені псевдоніми можна перепризначити, наприклад:
PS С:\Users\andrv> Set-Alias list Get-Location PS C:\Users\andrv> list Path C:\Users\andrv
У цьому прикладі ми призначили командлету Get-Location псевдонім 1ist, який раніше був прив’язаний до командлета Get-Chi1dItem. З останнього прикладу також видно, що імена параметрів -Name і -Va1ue в командлеті Set-A1ias можна пропустити, але в цьому випадку слід дотримуватися порядку, в якому вказані імена псевдонімів (перший параметр) і відповідний йому командлет (другий параметр).
Окрім командлетів, у оболонці PowerShell можна створювати псевдоніми для функцій, сценаріїв або виконуваних файлів. Наприклад, команда Set-A1ias pr c: exe створить псевдонім pr, який відповідає виконуваному файлу блокнота.exe (Блокнот Windows).
У PowerShell не можна створити псевдонім для команди з параметрами та значеннями.
Наприклад, можна створити псевдонім для командлета “Set-Location”, але не можна створити псевдонім для команди “Set-Location” за допомогою: Щоб призначити псевдонім такій команді, можна створити функцію, яка містить цю команду, і визначити псевдонім для цієї функції. Наприклад:
PS С:\Users\andrv> function CD32 (Set-Location C:\Windows\System32} PS C:\Users\andrv> Set-Alias go cd32 PS C:\Users\andrv> go PS C:\windows\system32> Удалить псевдоним можно с помощью командлета Remove-item, например: PS С:\windows.I\system32> Remove-Item alias:go PS C:\windows.I\system32> go Условие "go” не распознано как командпет, функция, выполняемая программа или файл сценария. Проверьте условие и повторите попытку. строка:1 знак:2 + до <<<<
Псевдоніми можна експортувати в текстовий файл (Export-A1ias) та імпортувати з файлу (Import-A1ias). Завдяки псевдонімам синтаксис PowerShell стає гнучким: одні і ті ж команди можна писати як дуже коротко, так і в розгорнутому вигляді. Це дуже важливо для мови, яка одночасно є оболонкою командного рядка і мовою сценаріїв.
При інтерактивній роботі зручніше використовувати короткі псевдоніми і не повністю вказувати імена параметрів для прискорення введення команд. Якщо ви пишете скрипти, краще використовувати повні назви командлетів і їх параметри, це значно спростить аналіз програмного коду в подальшому.
Всі ми вже давно звикли до структури файлової системи як набору вкладених папок (каталогів) і файлів. В операційній системі Windows інтерфейс до такої структури забезпечують провідник Windows, оболонка cmd.exe, а також різні сторонні файлові менеджери. У системах поняття файлів і каталогів трактуються ширше, а в якості файлів тут можуть виступати різні компоненти системи (наприклад, апаратні пристрої або мережеві підключення). Такий підхід Полегшує пошук потрібних елементів в операційній системі. Оболонки командного рядка або інші утиліти, які отримують доступ до файлів у системах [L41X], також можуть працювати з цими компонентами.
PowerShell схожий в цьому аспекті тим, що дозволяє переглядати і переміщатися по різних сховищах даних, використовуючи ті ж знайомі процедури, які ви використовуєте для навігації по файловій системі.
Крім звичайних дисків локальної або мережевої файлової системи (C:, D:, і так далі), оболонка підтримує спеціальні (віртуальні) диски PowerShell, пов’язані з різними типами сховищ даних. Наприклад, кореневий ключ реєстру LOCACL MACHINE JEU відповідає диску NKT4:, псевдоніми, доступні в поточній сесії, відповідають диску Alias:, а сховище сертифікатів цифрового підпису відповідає диску Cert:.
Щоб отримати список дисків PowerShell, доступних у поточному сеансі, потрібно використовувати командлет Get-PSDrive:
PS С:\Users\andrv> Get-PSDrive Name Used (GB) Free (GB) Provider Root Alias Alias C 246.59 121.33 FileSystem C:\ Cert Certificate \ E FileSystem E:\ Env Environment Function Function 58 Часть I. Знакомимся с PowerShell HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan
Як бачите, командлет Get-PSDrive для кожного диска повідомляє ім’я постачальника (стовпець постачальника), який підтримує цей диск.
Постачальник PowerShell – це адаптер, який надає користувачам PowerShell доступ до даних з певного спеціалізованого сховища в узгодженому форматі, подібному до формату звичайних дисків файлової системи. Таким чином, постачальники PowerShell надають доступ до даних, до яких інакше важко отримати доступ через командний рядок.
За замовчуванням PowerShell включає в себе кілька вбудованих положень , які можна використовувати для доступу до різних сховищ даних (табл. 3.2).
Окрім вбудованих постачальників, ви можете створювати власних постачальників PowerShell та встановлювати постачальників, створених іншими розробниками. Список постачальників, зареєстрованих у PowerShell, можна переглянути за допомогою командлета Get-PSProvider:
PS С:\> Get-PSProvider
Name Capabilities Drives
Registry
Alias
Environment
FileSystem
Function
ShouldProcess, Transactions {HKLM, HKCU}
ShouldProcess {Alias}
ShouldProcess {Env}
Filter, ShouldProcess, С... {С, E}
ShouldProcess {Function}
Variable
Certificate
ShouldProcess
ShouldProcess
WSMan Credentials
{Variable}
{Cert}
{WSMan}
У полі Capabi1ities тут для кожного провайдера вказані можливості, якими він володіє.
Про Shou1dProcess. Провайдер підтримує загальні параметри -WhatIf і -Firm, які можна використовувати для тестування певної дії перед безпосереднім її виконанням.
Про Fi1ter. Провайдер підтримує загальний параметр -Fi1ter для командлетів, які працюють із вмістом постачальника.
Про облікові дані. Провайдер дозволяє використовувати інші облікові записи при підключенні до сховищ даних.
Про транзакції. Провайдер реєструє транзакції, які дозволяють виконати кілька операцій по зміні даних, і в залежності від результату підтвердити всі операції або відкотити їх.
Основна мета провайдерів полягає в тому, щоб вони надавали доступ до різнорідних даних звичним послідовним способом. Модель представлення, яка використовується в даному випадку, базується на дисках файлової системи.
Дані, пропоновані провайдером, можна переглядати і змінювати так, як якщо б вони зберігалися у вигляді каталогів і файлів на жорсткому диску. Навігація та перегляд вмісту різних дисків PowerShell здійснюється за допомогою одних і тих самих базових командлетів.
При роботі з файловою системою ми використовуємо поняття поточного або робочого кататожа. Звертатися до файлів в робочому каталозі можна за іменем, не вказуючи до них повного шляху.
Нагадаємо, що в оболонці cmd.exe для визначення або зміни робочої директорії використовується команда CD (також можна використовувати повне ім’я CHDIR):
С: \Users\andrv> cd /? Вывод имени либо смена текущего каталога. CHDIR [/D] [диск:][путь] CHDIR [..] CD [/D] [диск:][путь] CD [..] обозначает переход в родительский каталог. Команда CD диск: отображает имя текущего каталога указанного диска. Команда CD без параметров отображает имена текущих диска и каталога.
В оболонці PowerShell поняття робочого (поточного) каталогу поширюється та на диски PowerShell. Дізнатися шлях до поточного каталогу можна за допомогою команд- літа Get-Location (псевдонім pwd даного командлета відповідає команді об лачки bash з аналогічною функціональністю):
PS С:\Users\andrv> Get-Location Path С:\Users\andrv
Для зміни поточного каталогу (включаючи перемикання на інший диск PowerShell), використовуйте команду Set-Location (псевдоніми cd, chdir, s1). Наприклад:
PS С:\Users\andrv> Set-Location c:\ PS C:\> Set-Location HKLM:\Software PS HKLM:\Software
Як бачите, при введенні командлета Set-Location ви явно не відображаєте відгуки про його виконання. За бажанням можна скористатися параметром PassThru, який відображає шлях до поточного каталогу після запуску команди Set-Location:
PS HKLM:\Software> Set-Location 'C:\Program Files' -PassThru Path C:\Program Files
У cmd.exe оболонці і оболонках, крім абсолютної настройки шляхів до файлів і папок, підтримуються відносні шляхи (щодо робочої директорії). При цьому поточному каталогу відповідає шлях . (крапка), батьківським каталогом поточного каталогу є шлях .. (дві крапки), а кореневим каталогом поточного диска є шлях \ (зворотний слеш). У PowerShell це позначення зберігається. Наприклад (замість командлета Set-Location ми використовуємо його псевдонім cd):
PS C:\Program Files> cd \ -PassThru Path C:\ PS C:\> cd HKIM: \Software -PassThru Path HKLM:\Software PS HKLM:\Software> cd .. -PassThru Path HKLM:\
Для перегляду елементів і контейнерів, що знаходяться на певному диску PowerShell, можна скористатися командлет Get-chiiditem (псевдоніми dir і is). Природно, що відображається інформація при цьому залежатиме від типу диска PowerShell. Для прикладу виконаємо командлет Get-childitem на диску, який відповідає кореневому розділу реєстру HKEYCURRENTUSER, і на звичайному диску файлової системи:
PS С:\Users\andrv> cd hkcu: PS HKCU:\> dir Hive: HKEY_CURRENT_USER Name Property AppEvents Console CtrlKeyShortcutsDisabled 0 CursorColor 4294967295 CursorSize 25 DefaultBackground 4294967295 DefaultForeground 4294967295 EnableColorSelection 0 ExtendedEditKey 1 ExtendedEditKeyCustom 0 FilterOnPaste 1 ForceV2 1 FullScreen 0 HistoryBufferSize 50 HistoryNoDup 0 InsertMode 1 LineSelection 1 LineWrap 1 LoadConlme 1 NumberOfHistoryBuffers 4 PopupColors 245 QuickEdit 1 ScreenBufferSize 589889656 PS HKCU:\> cd 'C:\Program Files' PS C:\Program Files> Is Directory: C:\Program Files Mode LastWriteTime Length Name d---- 1/12/2021 11:45 AM AMD d---- 9/10/2019 9:10 AM Android d---- 1/12/2021 10:59 AM ATI Technologies d---- 8/15/2017 2:14 PM Autodesk d---- 2/25/2021 3:40 PM CherryTree 11/20/2018 7:30 AM d----- 1/12/2021 12:01 PM d----- 9/9/2019 3:16 PM da--- 7/7/2017 10:36 AM d----- 12/29/2017 10:33 AM Code Industry Common Files dotnet Far Manager Git
Командлет Get-Chi1dItem має кілька параметрів, які дозволяють переглядати вміст підкаталогів, показувати приховані елементи, застосовувати фільтри для відображення файлів по масці і так далі.
Окрім використання стандартних дисків PowerShell, можна використовувати командлет New-PSDrive для створення власних дисків. Для цього потрібно вказати три параметри: -Name (ім’я створюваного диска PowerShell), -PSProvider (ім’я провайдера, наприклад, Fi1eSystem для накопичувача файлової системи або Registry для диска, відповідного розділу реєстру) і шлях до кореневого каталогу нового накопичувача.
Наприклад, ви можете створити накопичувач для певної папки на жорсткому диску, щоб ви могли отримати доступ до нього не по “реальному” довгому шляху, а просто за назвою накопичувача. Створимо диск PowerShell з іменем docs, який буде відповідати папці з документами конкретного користувача:
PS С:\Users\andrv> New-PSDrive -Name docs -PSProvider FileSystem -Root C: \Users\andrv\Documents Name Used (GB) Free (GB) Provider Root docs 0.00 121.32 FileSystem C:\Users\andrv\Documents Теперь обращаться к новому диску можно точно так же, как и к другим дискам PowerShell: PS С:\Users\andrv> cd docs: -PassThru Path docs:\ PS docs:\> dir Directory: C:\Users\andrv\Documents Mode LastWriteTime Length Name d---- 7/7/2017 10:32 AM FeedbackHub d---- 9/9/2019 3:35 PM IISExpress d---- 9/9/2019 3:35 РМ d---- 9/10/2019 9:32 AM d---- 2/25/2021 4:01 PM d---- 7/7/2017 8:57 AM My Web Sites Visual Studio 2019 Windows Powe rShe11 Записные книжки OneNote
В якості іншого прикладу створимо користувальницький диск CurrVer для ЛОКАЛЬНОЇ гілки реєстру НЦЕУ, де зберігаються різні важливі параметри операційної системи:
PS Docs:\> New-PSDrive -Name CurrVer -PSProvider Registry -Root HKLM\Software\Microsoft\Windows\CurrentVersion Name Provider Root CurrentLocation CurrVer Registry HKLM\Software\Microsoft\... Теперь содержимое ветви реестра можно просматривать, не вводя длинного пути, трудного для запоминания: PS docs:\> dir CurrVer:\ Hive: HKLM\Software\MicrosoftWindows\CurrentVersion Name AccountPicture ActionCenter Advert isingInfо Арр Management Арр Paths AppHost Property Enabled : 0 EnableWebContentEvaluation : 1
Загальні операції, такі як маніпулювання файловою системою, виконуються в PowerShell так само, як і в інших оболонках командного рядка.
У PowerShell вирази можна оцінювати безпосередньо в командному рядку.
Про оболонку PowerShell підтримує чотири типи команд: командлети, функції, сценарії та зовнішні виконувані файли.
Командлети аналогічні внутрішнім командам в інших оболонках. Скомпільований код командлета завантажується в процес PowerShell при запуску оболонки, тому вони працюють максимально ефективно. Синтаксис усіх командлетів уніфіковано, а імена завжди відповідають шаблону action-object.
Функція в PowerShell – це блок коду PowerShell, який має ім’я і залишається в пам’яті до закінчення поточного сеансу оболонки. При виклику функції можна передати їй аргументи, вказавши їх через пробіл після імені.
Сценарій – це блок коду PowerShell, який зберігається в зовнішньому файлі з розширенням .ps I.
Зовнішні виконувані файли викликаються з оболонки за іменем (якщо немає пробілів) або за допомогою оператора виклику
Для команд у PowerShell підтримуються два типи псевдонімів: стандартні ярлики для швидкого введення команд і знайомі назви команд із оболонок cmd та bash.
Провайдери PowerShell надають доступ до віртуальних дисків, пов’язаних з різними типами сховищ (системний реєстр, сховище цифрових сертифікатів тощо). Ви можете отримати доступ і працювати з цими віртуальними дисками так само, як і з дисками файлової системи.
Дякуємо нашій команді волонтерів за надану інформацію з відкритих джерел.