Частина 4. Знайомимося з PowerShell (Робота в оболонці PowerShell)

25 липня 2023 9 хвилин Автор: Lady Liberty

Повний посібник по роботі з оболонкою PowerShell

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

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

Редагування в командному рядку PowerShell

У командному рядку PowerShell доступні деякі варіанти редагування при введенні тексту (табл. 4.1).

Якщо ви працюєте в Windows Terminal, ви можете використовувати спеціальні поєднання клавіш для управління самим терміналом (наприклад, змінити розмір шрифту і відкриті на екрані панелі). Ці комбінації можна переглянути на вкладці Actions в налаштуваннях терміналу.

Мал. 4.1. Комбінації клавіш для керування терміналом Windows

При необхідності комбінації можна змінити, для цього потрібно відредагувати файл конфігурації settings.json, посилання для його відкриття також знаходиться на вкладці Actions в налаштуваннях терміналу.

Під час використання оболонки PowerShell можна використовувати буфер Windows. Якщо ви використовуєте стандартну консоль Windows, виділити і скопіювати текст в буфер обміну з вікна PowerShell можна наступним чином: натиснути правою кнопкою миші по рядку заголовка вікна PowerShell (або будь-якої кнопкою миші на значку вікна), вибрати в контекстному меню пункт «Правка і позначка», після чого використовувати клавіші курсору з одночасним утриманням клавіші <Shift>,  виділити потрібний блок тексту (також можна виділити мишкою, утримуючи її ліву кнопку) і натиснути клавішу <Enter>. Ви можете вибрати весь вміст вікна PowerShell, вибравши Редагувати та Вибрати з того самого контекстного меню. Щоб вставити текст з буфера Windows в командне вікно PowerShell (у поточному положенні курсору), виберіть пункт Редагувати та вставити.

Спростити маніпуляції з буфером Windows в стандартній консолі можна, включивши режими вибору миші і швидкої вставки. Для цього клікніть правою кнопкою миші по рядку заголовка вікна PowerShell, виберіть з контекстного меню пункт Properties, а в розділі Edit вкладки Settings діалогового вікна Windows PowerShell Properties встановіть прапорці Minching і Quick Paste (мал 4.2). Після цього можна виділяти текст мишкою, затиснувши ліву кнопку. Щоб скопіювати виділений фрагмент в буфер обміну, досить натиснути клавішу <Enter> або клацніть правою кнопкою миші. Текст з буфера обміну також вставляється в поточне положення курсору клацанням правою кнопкою миші.

Мал. 4.2. Налаштування властивостей стандартної консолі Windows

Якщо встановлено прапорець Дозволити сполучення клавіш із функцією CONTROL, можна скопіювати виділений текст до буфера обміну, натиснувши сполучення клавіш <Ctrl>+<c> або <Ctrl>+ +<lnsert> і вставити текст із буфера обміну, натиснувши <Ctrl>+<v> або <Shift>+<Insert>.

Windows Terminal Tayuke підтримує режими вибору миші і швидкої вставки, можна копіювати текст в буфер обміну і вставляти його з буфера обміну за допомогою тих же комбінацій <Ctrl>+<c>/<Ctrl>+<Insert> і <Ctrl>+<v>/<Shift>+<lnsert>.

Насправді, більшість з наведених у табл. 4.1 Поєднання клавіш реалізовані на термінальному рівні, т. Е. Діють однаково у всіх додатках консолі Windows. У самій оболонці PowerShell ще однією важливою функцією редагування є автоматичне завершення команд і їх параметрів у міру введення.

Автодоповнення команд

Перебуваючи в PowerShell, ви можете ввести частину команди, натиснути клавішу <TaB> і система спробує виконати команду сама.

Таке автоматичне завершення працює, по-перше, для імен файлів і шляхів до файлової системи (цей режим підтримується і оболонкою cmd.exe). Коли ви натискаєте клавішу <T>, PowerShell автоматично розгорне шлях до частково введеної файлової системи до першого знайденого збігу. При повторному натисканні клавіші <TaB> здійснюється циклічний перехід відповідно до доступних варіантів виділення. Наприклад, нам потрібно перейти в каталог C:\Program Files. Вводимо команду cd в командному рядку PowerShell і вказуємо початок назви потрібного нам каталогу в якості параметра:

PS С:\Users\andrv> od c:\pro
Нажмем теперь клавишу <ТаЬ>, и система автоматически дополнит путь к каталогу:
PS С:\Users\andrv> cd 'C:\Program Files'

Як бачимо, ім’я каталогу, що містить пробіли, укладено в апострофах.

Як бачите, назва каталогу, що містить прогалини, полягає в апострофі. Також у PowerShell реалізовано можливість автоматичного завершення шляхів файлової системи на основі шаблонних символів: ? (замінює один довільний символ) та * (замінює будь-яку кількість довільних символів). Наприклад, якщо PowerShell ввести команду cd c:\pro*fiies і натиснути клавішу <ТаЬ>, то в рядку введення ЗНОВУ З’ЯВИТЬСЯ команда cd ‘C:\Program Files ‘. Розділ 4. Робота в оболонці PowerShell 69 По-друге, у PowerShell реалізовано автоматичне завершення імен командлетів та їх параметрів. Якщо ввести першу частину імені командлета (дієслово) і дефіс, натиснути після цього клавішу <ТаЬ>, то система підставить ім’я першого відповідного командлета (наступний варіант імені вибирається шляхом повторного натискання <ТаЬ>). Наприклад, введемо у командному рядку PowerShell дієслово get-:

PS С:\Users\andrv> getНажмем клавишу <Tab>:
PS С:\Users\andrv> Get-Acl
Еще раз нажмем клавишу <ТаЬ>:
PS С:\Users\andrv> Get-Alias
Нажимая далее клавишу <ТаЬ>, мы можем перебрать все командлеты, начинающиеся с глагола Get.
Аналогичным образом автоматическое завершение срабатывает для частично введенных имен параметров командлета: нажимая клавишу <ТаЬ>, мы будем циклически перебирать подходящие имена. Например, введем в командной строке
PowerShell следующий командлет:
PS С:\Users\andrv> Get-Alias -
Нажмем клавишу <ТаЬ>:
PS С:\Users\andrv> Get-Alias -Name
Как видите, система подставила в нашу команду параметр -Name. Еще раз нажмем
клавишу <ТаЬ>:
PS С:\Users\andrv> Get-Alias -Exclude
Нажимая далее клавишу <ТаЬ>, мы можем перебрать все параметры, поддерживающиеся командлетом Get-Alias.
В-третьих, PowerShell позволяет автоматически завершать имена используемых
переменных. Например, создадим переменную $stringvariabie:
PS С:\Users\andrv> $StringVariable=’asdfg'
Введем теперь часть имени этой переменной:
PS С:\Users\andrv> $str
Нажав клавишу <ТаЬ>, мы получим в командной строке полное имя нашей переменной:
PS С:\Users\andrv> $Stringvariable
Наконец, PowerShell поддерживает автоматическое завершение имен свойств и методов объектов. Например, введем следующие команды:
PS С:\Users\andrv> $s='qwerty'
PS С:\Users\andrv> $s.len
70 Часть I. Знакомимся с PowerShell
Нажмем клавишу <ТаЬ>:
PS С:\Users\andrv> $s.Length
Система автоматически подставила свойство Length, имеющееся у символьных
переменных. Если подставляется имя метода (функции), а не свойства, то после его
имени автоматически ставится круглая скобка. Например, введем следующую
команду:
PS С:\Users\andrv> $s.sub
Нажмем клавишу <ТаЬ>:
PS С:\Users\andrv> $s.Substring(
Теперь можно вводить параметры метода Substring.

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

За замовчуванням натискання клавіші <Enter> завершує виконання команди, після чого оболонка починає розбирати і виконувати цю команду. Якщо ви вкажете символ зворотної галочки ‘ як останній символ у рядку, то команда продовжиться наступним рядком. У цьому випадку символ нового рядка розглядається як звичайний символ, що розділяє пробіли.

Наприклад, обчислимо значення виразу 10+2-3+ (5*4-3), розмістивши його в трьох рядках:

PS С:\Users\andrv> 10+'
» 2-3+('
» 5*4-3)
26

Як бачите, підказка змінюється на >> символи при введенні додаткових рядків – це ознака того, що попередня команда продовжує вводитися.

Довідка PowerShell

При роботі з інтерактивною командною оболонкою важливо мати під рукою докладну і зручну довідкову систему, яка описує можливості команд і приклади їх використання. У PowerShell є така система, і є кілька способів отримати довідкову інформацію всередині оболонки.

PS С:\Users\andrv> Get-Process -?
ИМЯ
Get-Process
СИНТАКСИС
Get-Process [[-Name] <string[]>] [-ComputerName <string[]>] [-Module]
[-FileVersionlnfo] [<CommonParameters>]
Get-Process [[-Name] <string[]>] -IncludeUserName [<CommonParameters>]
Get-Process -Id <int[]> -IncludeUserName [<CommonParameters>]
Get-Process -Id <int[]> [-СотриterName <string[]>] [-Module]
[-FileVersionlnfo] [<CommonParameters>]
Get-Process -Inputobject <Process[]> -IncludeUserName [<CommonParameters>]
Get-Process -Inputobject <Process[]> [-ComputerName <string[]>] [-Module]
[-FileVersionlnfo] [<CommonParameters>]
ПСЕВДОНИМЫ
gps
ps
ЗАМЕЧАНИЯ
Get-Help cannot find the Help files for this cmdlet on this computer.
It is displaying only partial help.
— To download and install Help files for the module that includes this
cmdlet, use Update-Help.
— To view the Help topic for this cmdlet online, type: "Get-Help Get-Process
-Online" or go to https://go.microsoft.com/fwlink/7LinkI0113324.
На самом деле при вводе команды Get-Process -? срабатывает специальный командлет Get-Help, Т. е. обратиться К справке ДЛЯ командлета Get-Process можно так:
PS С:\Users\andrv> Get-Help Get-Process

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

У перших версіях PowerShell файли довідки за замовчуванням були локальними, але тепер докладні відомості довідки зберігаються в Інтернеті на сайтах Microsoft. Доступ до нього можна отримати з командного рядка за допомогою командлета Get-He1p з параметром -0nline: PS C: \Users\andrv> Get—He1p Get—Process —0n1ine

У цьому випадку в браузері відкриється детальний опис командлета Get-Process (див. мал 4.3).

Мал. 4.3. Онлайнові відомості про командлет PowerShell

Відомості про довідку також можна відкрити в окремому діалоговому вікні, а не у браузері. Для цього використовується параметр -ShowWindow (мал. 4.4): PS C: \Users\andrv> Get—He1p Get—Process —ShowWindow Командлет Update-He1p можна використовувати для завантаження файлів довідки на комп’ютер для швидшого доступу до них. Після локальної інсталяції файлів довідки відомості командлета відображатимуться у повнішому форматі. Наприклад:

Мал. 4.4. Довідкова інформація про командлет у діалоговому вікні
PS С:\Users\andrv> Get-Help Get-Process
NAME
Get-Process
ОПИСАНИЕ
Gets the processes that are running on the local computer or a remote
computer.
СИНТАКСИС
Get-Process [[-Name] <System.String[]>] [-СотриterName <System.String[]>]
[-FileVersionlnfo] [-Module] [<CommonParameters>]
Get-Process [-ComputerName <System.String[]>] [-FileVersionlnfo]
-Id <System.Int32[]> [-Module] [<CommonParameters>]
Get-Process [-ComputerName <System.String[]>] [-FileVersionlnfo]
-Inputobject <System.Diagnostics.Process[]> [-Module] [<CommonParameters>]
Get-Process -Id <System.Int32[]> -IncludeUserName [<CommonParameters>]
Get-Process [[-Name] <System.String[]>] -IncludeUserName
[<CommonParameters>]
Get-Process -IncludeUserName -InputObject <System. Diagnostics.Process[]>
[<CommonParameters>]
ОПИСАНИЕ
The 'Get-Process' cmdlet gets the processes on a local or remote computer.
Without parameters, this cmdlet gets all of the processes on the local
computer. You can also specify a particular process by process name or
process ID (PID) or pass a process object through the pipeline to this
cmdlet.
By default, this cmdlet returns a process object that has detailed
information about the process and supports methods that let you start and
stop the process. You can also use the parameters of the 'Get-Process'
cmdlet to get file version information for the program that runs in the
process and to get the modules that the process loaded.
ССЫЛКИ ПО ТЕМЕ
Online Version: https://docs.microsoft.com/powershell/module/
microsoft.powershell.management/get-process?view=powershel1-5.l&WT .mc_id=
ps-gethelp
Debug-Process
Get-Process
Start-Process
Stop-Process
Wait-Process
ЗАМЕЧАНИЯ
To see the examples, type: "get-help Get-Process -examples".
For more information, type: "get-help Get-Process -detailed".
For technical information, type: "get-help Get-Process -full".
For online help, type: "get-help Get-Process -online"

Тепер ми додатково бачимо опис командлета Get-Process та посилання на пов’язані з ним інші командлети. Для отримання докладної інформації командлет Get-Help слід запускати з параметрами -Detailed або -Full. У цьому випадку будуть виведені докладні описи кожного з параметрів, що підтримуються аналізованим командлетом, різні зауваження, а також приклади запуску даного командлета з різними параметрами та аргументами (параметр -examples дозволяє окремо подивитись лише приклади). Наприклад:

PS С:\Users\andrv> Get-Help Get-Process -Full
ИМЯ
Get-Process
ОПИСАНИЕ
Gets the processes that are running on the local computer or a remote
computer.
СИНТАКСИС
Get-Process [[-Name] <System.String[]>] [-ComputerName <System.String[]>]
[-FileVersionlnfo] [-Module] [<CommonParameters>]
Get-Process [-ComputerName <System.String[]>] [-FileVersionlnfo]
-Id <System.Int32[]> [-Module] [<CommonParameters>]
Get-Process [-ComputerName <System.String[]>] [-FileVersionlnfo]
-Inputobject <System.Diagnostics.Process[]> [-Module] [<CommonParameters>]
Get-Process -Id <System.Int32[]> -IncludeUserName [<CommonParameters>]
Get-Process [[-Name] <System.String[]>] -IncludeUserName
[<CommonParameters>]
Get-Process -IncludeUserName -Inputobject <System.Diagnostics.Process[]>
[<CommonParameters>]
ОПИСАНИЕ
The 'Get-Process' cmdlet gets the processes on a local or remote computer.
Without parameters, this cmdlet gets all of the processes on the local
computer. You can also specify a particular process by process name or
process ID (PID) or pass a process object through the pipeline to this
cmdlet.
By default, this cmdlet returns a process object that has detailed
information about the process and supports methods that let you start and 
stop the process. You can also use the parameters of the 'Get-Process' cmdlet
to get file version information for the program that runs in the process and
to get the modules that the process loaded.
ПАРАМЕТРЫ
-ComputerName <System.String[]>
Specifies the computers for which this cmdlet gets active processes.
The default is the local computer.
Type the NetBIOS name, an IP address, or a fully qualified domain name
(FQDN) of one or more computers. To specify the local computer, type the
computer name, a dot (.), or localhost.
This parameter does not rely on Windows PowerShell remoting. You can use
the ComputerName parameter of this cmdlet even if your computer is not
configured to run remote commands.
Требуется? false
Позиция? named
Значение по умолчанию Local computer
Принимать входные данные конвейера? True (ByPropertyName)
Принимать подстановочные знаки? false

Як бачимо, в описі параметра Name надаються відомості про п’ять атрибутів. Ці атрибути притаманні більшості параметрів командлетів (табл. 4.2).

Довідкова інформація, не пов’язана з командлетами

Усі доступні розділи довідкової системи PowerShell можна побачити за допомогою команди Get-Help

PS С:\Users\andrv> Get-Help *
Name Category Module
foreach Alias
Alias
Alias
Alias
where
ас
clc
cli
Alias
Alias
Alias
more
cd. .
cd\
ImportSystemModules
Pause
help
Function
Function
Function
Function
Function
Function
Add-History
Clear-History
Connect-PSSession
Debug-Job
Cmdlet Microsoft.PowerShell....
Cmdlet Microsoft.PowerShell....
Cmdlet Microsoft.PowerShell....
Cmdlet Microsoft.PowerShell....
about Aliases
about Alias Provider
about Arithmetic Operators
about Arrays
about Assignment Operators
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile

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

PS С:\Users\andrv> Get-Help about_*
Name Category Module
about Aliases
about Alias Provider
about Arithmetic Operators
about Arrays
about Assignment Operators
about Automatic Variables
about Break
about Calculated Properties
about Certificate Provider
about Character Encoding
about CimSession
about Classes
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile
HelpFile

Таким чином, щоб прочитати інформацію, наприклад, про використання масивів в PowerShell, потрібно виконати таку команду:

PS С:\Users\andrv> Get-Help about_Arrays
ABOUT_ARRAYS
Short Description
Describes arrays, which are data structures designed to store collections
of items.
Long Description
An array is a data structure that is designed to store a collection of items.
The items can be the same type or different types.
Beginning in Windows PowerShell 3.0, a collection of zero or one object has
some properties of arrays.
Creating and initializing an array
To create and initialize an array, assign multiple values to a variable.

Зауважте, що командлет Get-He1p відображає вміст розділу довідки одночасно. Функції tap і he1p дозволяють відображати довідкову інформацію на екрані (аналогічно команді cmd.exe інтерпретатора), наприклад: тап про масиви.

Журнал команд у сеансі

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

Щоб переміщатися назад по журналу команд, натисніть клавішу <T>. Під час першого натискання цієї клавіші в командному рядку відображається остання команда, виконана в поточному сеансі. При повторному натисканні клавіші з’явиться передостання команда і т. д. Отримавши потрібну команду, ви можете відредагувати її, а потім натиснути <Enter> для виконання команди. Клавіша дозволяє переміщатися вперед за допомогою команд.

Замість перегляду всіх команд у журналі сеансів можна переглядати лише команди, які починаються з певних символів. Для цього введіть в командному рядку ці початкові символи і натисніть клавішу <F8>.

Крім сполучень клавіш, в PowerShell є спеціальні командлети для роботи з командним журналом. Команда “Історія отримання” (псевдоніми h, history та ghy) дозволяє відображати історію команд:

PS С:\> Get-History
Id CommandLine
1 cd с:
2 cd \
3 del -Recurse -Whatlf "C:\Program Files"
4 del -Recurse -Whatlf "C:\temp\*.*"
5 del -Whatlf "C:\temp\*.*"
6 Get-Alias del

За замовчуванням останні 32 команди відображаються з їх порядковими номерами (стовпець Id). Кількість команд, які відображаються, можна змінити за допомогою параметра -Count. Наприклад, наступна команда відобразить три останні команди:

PS С:\> Get-History -Count 3
Id CommandLine
5 del -Whatlf "C:\temp\*.*"
6 Get-Alias del
7 Get-History

З журналу сеансів можна вибрати команди, які відповідають певному критерію. Для цього використовується процедура конвеєризації об’єктів і спеціальний командлет Where-Object (більш детально ці теми розглядаються в розділі 5). Наприклад, щоб відобразити всі команди, які містять слово del, можна виконати таку команду:

PS С: \> Get-History | Where-Object {$_. CommandLine -like "*del*"}
Id CommandLine
3 del -Recurse -Whatlf "C:\Program Files"
4 del -Recurse -Whatlf "C:\temp\*.*"
5 del -Whatlf "C:\temp\*.*"
6 Get-Alias del

Отриманий за допомогою Get-History список команд можна експортувати у зовнішній файл у форматі XML або CSV (текстовий файл із комами як роздільник). Для цього знову потрібно застосовувати конвеєризацію команд та спеціальні командлети для експорту даних у певний формат. Наприклад, наступна команда зберігає журнал команд у CSV-файлі c:\history.csv: PS З:\> Get-History | Export-Csv c:\history.csv За допомогою командлета Add-History можна додавати команди до журналу сеансу (наприклад, для створення журналу, який містить команди, введені за кілька сеансів роботи). Наприклад, наступна команда додасть до журналу сеансу команди, збережені у файлі c:\history.csv: PS С:\> Import-Csv c:\history.csv | Add-History Командлет invoke-History (псевдоніми-г, скорочення від repeat або rerun. і ihy) дозволяє повторно виконувати команди з журналу сеансу, при цьому команди можна задавати за їх порядковим номером або першим символам, а також одержувати по конвеєрі від командлета Get-History. Наведемо кілька прикладів.

Вызов последней команды:
PS С:\> Invoke-History
Вызов третьей команды по ее порядковому номеру:
PS С:\> Invoke-History -Id 3
или просто:
PS С:\> г 3
Вызов последней команды Get-Help:
PS С:\> Invoke-History Get-He
Вызов команд, полученных по конвейеру от командлета Get-History:
PS С:\> Get-History | Where-Object {$_. commandLine -like "*del*"} |
Invoke-History

Настроювання зовнішнього вигляду командного рядка PowerShell

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

Мал. 4.5. Діалогове вікно для налаштування параметрів вікна PowerShell

Це вікно має кілька вкладок (Налаштування, Шрифт, Макет, Кольори та Термінал), які групують елементи управління, що дозволяють керувати відповідними категоріями налаштувань. Детально розглядати ці параметри не будемо, їх призначення цілком очевидно. При роботі в новому терміналі Windows (wt.exe) розмір шрифту можна змінити прямо в командному рядку за допомогою комбінацій клавіш <Ctrl>+<+> (збільшити шрифт) і <Ctrl>+<-> (зменшити шрифт). Зовнішній вигляд кожного доступного профілю в терміналі можна змінити за допомогою налаштувань терміналу на вкладці Appearance (мал. 4.6). Тут можна вибрати колірну схему і шрифт, задати форму курсору, встановити фонове зображення і т. Д.

Мал. 4.6. Налаштування зовнішнього вигляду профілю в терміналі Windows

Заголовок командного вікна

PowerShell дає можливість налаштовувати різні параметри командного вікна (розмір, колір тексту та фону, рядок заголовка тощо) безпосередньо з оболонки. Для цього можна використовувати командлет Get-Host, який за замовчуванням відображає інформацію про саму оболонці PowerShe11 (версія, регіональні параметри)

PS С:\Users\andrv> Get-Host
Name : ConsoleHost
Version : 5.1.19041.906
Instanceld : 13dac4f0-dbb5-4382-8627-e9ala03d2fde
UI :
Currentculture :
CurrentUICulture :
System.Management.Automation.Internal.Host...
ru-RU
ru-RU
PrivateData :
DebuggerEnabled :
IsRunspacePushed :
Microsoft.PowerShell.ConsoleHost+ConsoleColor...
True
False
Runspace : Systern.Management.Automation.Runspaces.Local...
Нам понадобится СВОЙСТВО UI (это объект .NET-Класса System. Management.
Automation.Internal.Host.InternalHostUserlnterface). В СВОЮ очередь, объект UI
имеет свойство Rawui, позволяющее получить доступ к параметрам командного
окна PowerShell. Для просмотра данных параметров выполним следующую команду:
PS С:\Users\andrv> (Get-Host) .UI .RawUI
Foregroundcolor
Backgroundcolor
CursorPosition
WindowPosition
CursorSize
BufferSize
WindowSize
MaxWindowSize
MaxPhysicalWindowSize
KeyAvailable
WindowTitle
Gray
Black
0,23
0, 0
25
120,39
120,39
120,39
1842,65
True
Windows PowerShell

Деякі властивості об’єкта RawUI можна змінювати, тим самим налаштовуючи відповідні властивості командного вікна. Для цього зручніше зберегти об’єкт RawUI в окремій змінній:

S С:\Users\andrv> $а= (Get-Host) .UI .RawUI

Тепер властивості можна призначити нові. За замовчуванням в рядку заголовка командного вікна відображається «Windows PowerShell». Щоб змінити цей заголовок, потрібно записати нове значення у властивість WindowTitIe об’єкту RawUI:

PS С:\Users\andrv> $a.WindowTitle=”Mоe командное окно”

Відразу після виконання останньої команди заголовком вікна PowerShell буде “My Command Window” (мал 4.7).

Мал. 4.7. Змінено заголовок вікна команд PowerShell

Запрошення командного рядка

Тепер перейдемо до налаштування командного рядка. У PowerShell цей запит управляється функцією підказки, яка повинна повертати один рядок. Давайте подивимося, не вдаючись поки в подробиці, яким вмістом володіє ця функція за замовчуванням (відображає символи ps, потім шлях до поточного каталогу і символ >). Для цього можна запустити таку команду:

PS С:\Users\andrv> (Get-Itap function:prompt).Definition
"PS $ ($executionContext.Sessionstate.Path.CurrentLocation)$(’>’ *
($nestedPromptLevel +1))
# .Link
# https://go.microsoft.com/fwlink/?LinkID=225750
# .ExternalHelp System.Management.Automation.dll-help.xml

Щоб змінити запрошення, потрібно перевизначити функцію prompt. Наприклад, після виконання наступної команди запрошення складатиметься з шляху до каталогу і символу >:

PS С:\Users\andrv> function prompt{"$(Get-Location)> "}
C:\Users\andrv>

Як бачимо, вид запрошення змінюється одразу після завдання нового вмісту функції prompt  У функції prompt можна не тільки формувати запрошення командного рядка, але й виконувати будь-які інші дії. Наприклад, за допомогою функції prompt можна вирішити проблему відображення довгих шляхів до поточного каталогу (такі шляхи при відображенні командного рядка займають багато місця, і працювати стає незручно). Якщо визначити функцію prompt так, як у листі 4.1, то шлях до поточного каталогу відображатиметься не в запрошенні командного рядка, а в заголовку командного вікна  (мал. 4.8).

Лістинг коду 4.1. Відображення всіх параметрів скрипта

function prompt {
(Get-Host).UI.RawUI.WindowTitle="PS $(Get-Location)”
"PS > ”
}
Мал. 4.8. Вікно PowerShell, шлях до поточного каталогу як заголовок

Налаштування профілів користувачів

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

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

Щоб зберегти зміни, потрібно створити так званий профіль PowerShell і записати в нього всі команди, які визначають псевдоніми, функції, змінні і т. Д. Профіль – це скрипт, який буде автоматично виконуватися при кожному запуску PowerShell. Добре розроблений профіль може спростити PowerShell і адміністрування операційної системи. У PowerShell для користувача можуть бути визначені чотири різних профілю, що знаходяться в домашньому каталозі користувача (шлях до цього каталогу міститься в змінній $Note) і в директорії установки PowerShell (шлях до нього зберігається в змінній $PSHOME).

По-перше, профіль можна зберегти у файлі $PSHome\proflle.ps1. Цей профіль поширюється на всіх користувачів і оболонки.

По-друге, профіль може бути розташований у файлі $PSHome\Microsoft.PowerShell proflle.psl. Цей профіль поширюється на всіх користувачів, але тільки на одну оболонку.

Третій тип профілю можна розташувати у файлі $Home\Documents\PowerShell\ proflle.psl. Цей профіль застосовується тільки до поточного користувача і до всіх оболонок.

Нарешті, профіль можна зберегти у файлі $Home\Documents\WindowsPowerShell\ Microsoft.PowerShell_proflle.psl. Цей профіль застосовується лише до поточного користувача та лише до оболонки Microsoft.PowerShell.

Політики виконання сценаріїв

Політика виконання PowerShell визначає, чи можуть сценарії PowerShell виконуватися на певному комп’ютері (включаючи завантаження користувацьких профілів сценаріїв, які автоматично виконуються при запуску оболонки) і, якщо так, то чи повинні вони мати цифровий підпис. Можливі політики виконання PowerShell описані в таблиці 4.3 (аналогічну інформацію можна отримати в PowerShell за допомогою команди Get-Help about sign).

Дізнатися, яка політика виконання активна, можна за допомогою командлета Get-ExecutionPolicy:

Get-ExecutionPolicy:
PS С:\> Get-ExecutionPolicy
Restricted

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

Використовуйте командлет Set-ExecutionPolicy, щоб змінити політику виконання. Параметри політики зберігаються в системному реєстрі, тому для їх зміни потрібно запустити PowerShell від імені адміністратора. Наприклад, щоб установити політику виконання RemoteSign, запустіть таку команду:

Set-ExecutionPolicy RemoteSigned

Давайте ще раз перевіримо поточну політику:

PS С:\> Get-ExecutionPolicy
RemoteSigned

Тепер давайте закінчимо сеанс PowerShell і знову запустимо оболонку. Цього разу ви не отримуватимете жодних повідомлень про помилки, функція підказки з профілю користувача має працювати коректно, а шлях до поточного каталогу відображатиметься в рядку заголовка командного вікна PowerShell (див. мал 4.8).

Підсумки

  • Можливість редагувати текст у PowerShell залежить від терміналу, який ви використовуєте.

  • PowerShell підтримує автодоповнення при введенні шляхів до файлів і каталогів, а також імен команд і змінних.

  • Використовуйте командлет Get-He1p, щоб отримати довідку з команд та інших аспектів PowerShell.

  • Сеанс командного рядка PowerShell можна зареєструвати — команди та їх вихідні дані будуть автоматично збережені у зовнішньому файлі.

  • Зовнішній вигляд командного рядка PowerShell залежить від налаштувань терміналу, в якому запущена оболонка.

  • Додаткові модулі (PSReadLine, posh-git, 0h Mu Posh) розширюють управління та дизайн командного рядка.

  • Коли PowerShell запускається, він автоматично виконує сценарії профілю, де ви можете визначити псевдоніми, функції та змінні, які ви хочете.

  • Режими виконання сценаріїв PowerShell залежать від встановленої політики. Політику виконання можна дізнатися за допомогою командлета Get-ExecutionP01icy, а змінити її можна за допомогою функції Set-ExecutionP01icy.

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

Інші статті по темі
ОсвітаСамонавчання
Читати далі
Частина 5. Знайомимося з PowerShell (Робота з об’єктами)
Робота з об'єктами PowerShell - це повний посібник, призначений для навчання користувачів роботі з об'єктами в командній оболонці PowerShell. У цьому посібнику представлені основні концепції та техніки роботи з об'єктами, включаючи створення, зчитування, зміну та видалення даних.
595
ОсвітаСамонавчання
Читати далі
Частина 6. Знайомимося з PowerShell (Управління виведенням команд)
Управління виведенням команд у PowerShell" - детальний посібник, який допоможе вам керувати та оптимізувати виведення результатів команд в PowerShell, забезпечуючи більш ефективну та зручну роботу з цією командною оболонкою.
659
ОсвітаСамонавчання
Читати далі
Частина 8. PowerShell як мова програмування (Оператори та керуючі інструкції)
PowerShell надає детальний огляд різних типів операторів і керуючих інструкцій, які дозволяють програмістам ефективно працювати зі скриптами та автоматизувати рутинні завдання в середовищі Windows.
674
ОсвітаСамонавчання
Читати далі
Частина 10. PowerShell як мова програмування (Обробка помилок при виконанні команд)
Обробка помилок у PowerShell: Забезпечення стабільності та безпеки виконання програм та скриптів. Дізнайтесь про конструкції try-catch та команду -ErrorAction для ефективної обробки помилок у PowerShell та забезпечення надійного функціонування ваших проектів.
558
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.