Частина 3. Знайомимося з PowerShell (Перші кроки у PowerShell. Основні поняття)

24.07.2023 8 хвилин Автор: Lady Liberty

PowerShell: Перший крок у світ автоматизації

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

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

Перші кроки у PowerShell. Основні поняття

Запуск оболонки PowerShell

Щоб почати новий сеанс в оболонці PowerShell, можна вибрати Windows PowerShell у меню Пуск. Інший варіант запуску оболонки – натиснути кнопку Виконати в меню «Пуск», ввести ім’я файлу powershe11 і натиснути кнопку ОК.

У результаті відкриється нове вікно стандартної консолі Windows з пропозицією введення команд (мал 3.1).

Мал. 3.1. PowerShell в стандартній консолі Windows

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

Мал. 3.2. PowerShell у терміналі Windows

Погляньте на пропозицію спробувати новий кросплатформний 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

Типи команд PowerShell

Зазвичай в оболонках всі команди ділилися на внутрішні команди, які розпізнаються і виконуються безпосередньо відповідним інтерпретатором, і зовнішні команди, що представляють собою окремі виконувані модулі. У 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 стає гнучким: одні і ті ж команди можна писати як дуже коротко, так і в розгорнутому вигляді. Це дуже важливо для мови, яка одночасно є оболонкою командного рядка і мовою сценаріїв.

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

Диски 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 надають доступ до даних, до яких інакше важко отримати доступ через командний рядок.

За замовчуванням 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

Основна мета провайдерів полягає в тому, щоб вони надавали доступ до різнорідних даних звичним послідовним способом. Модель представлення, яка використовується в даному випадку, базується на дисках файлової системи.

Дані, пропоновані провайдером, можна переглядати і змінювати так, як якщо б вони зберігалися у вигляді каталогів і файлів на жорсткому диску. Навігація та перегляд вмісту різних дисків 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 надають доступ до віртуальних дисків, пов’язаних з різними типами сховищ (системний реєстр, сховище цифрових сертифікатів тощо). Ви можете отримати доступ і працювати з цими віртуальними дисками так само, як і з дисками файлової системи.

Дякуємо нашій команді волонтерів за надану інформацію з відкритих джерел.

Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.