PowerShell є потужним інструментом, який дозволяє адміністраторам систем, розробникам та іншим фахівцям ефективно управляти операційною системою Windows. Ця командна оболонка розроблена Microsoft і забезпечує високий рівень автоматизації та гнучкість при виконанні різноманітних завдань. У цій частині ви дізнаєтесь про основні концепції та синтаксис PowerShell, навчитеся виконувати різні операції з файлами, реєстром, мережею та активними каталогами. Ми представимо вам приклади використання команд та сценаріїв для ефективної роботи з системою. Завдяки PowerShell ви зможете автоматизувати рутинні завдання, швидко налаштовувати та оптимізувати систему, а також забезпечити безпеку та захист даних.
Ви дізнаєтесь, як створювати власні сценарії для автоматичного виконання завдань та взаємодії з іншими програмами. Наш посібник допоможе вам освоїти PowerShell від початкового рівня до продвинутих технік, що дозволить вам стати більш продуктивним та ефективним у вашій роботі з операційною системою Windows. Розкрийте всі можливості PowerShell і впроваджуйте нові рішення для успішного управління вашою системою. При роботі в командному рядку доводиться вручну вводити команди, які можуть бути досить довгими і мати безліч різних параметрів, які складно запам’ятати. Тому важливо навчитися коректно користуватися наявною в системі системою довідки, а також використовувати можливості оболонки для швидкого набору команд або виклику їх повторно. При роботі в командному рядку доводиться вручну вводити команди, які можуть бути досить довгими і мати безліч різних параметрів, які складно запам’ятати. Тому важливо навчитися коректно користуватися наявною в системі системою довідки, а також використовувати можливості оболонки для швидкого набору команд або виклику їх повторно.
У командному рядку PowerShell доступні деякі варіанти редагування при введенні тексту (табл. 4.1).
Якщо ви працюєте в Windows Terminal, ви можете використовувати спеціальні поєднання клавіш для управління самим терміналом (наприклад, змінити розмір шрифту і відкриті на екрані панелі). Ці комбінації можна переглянути на вкладці Actions в налаштуваннях терміналу.
При необхідності комбінації можна змінити, для цього потрібно відредагувати файл конфігурації 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> або клацніть правою кнопкою миші. Текст з буфера обміну також вставляється в поточне положення курсору клацанням правою кнопкою миші.
Якщо встановлено прапорець Дозволити сполучення клавіш із функцією 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 є така система, і є кілька способів отримати довідкову інформацію всередині оболонки.
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).
Відомості про довідку також можна відкрити в окремому діалоговому вікні, а не у браузері. Для цього використовується параметр -ShowWindow (мал. 4.4): PS C: \Users\andrv> Get—He1p Get—Process —ShowWindow Командлет Update-He1p можна використовувати для завантаження файлів довідки на комп’ютер для швидшого доступу до них. Після локальної інсталяції файлів довідки відомості командлета відображатимуться у повнішому форматі. Наприклад:
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 (мал 4.5).
Це вікно має кілька вкладок (Налаштування, Шрифт, Макет, Кольори та Термінал), які групують елементи управління, що дозволяють керувати відповідними категоріями налаштувань. Детально розглядати ці параметри не будемо, їх призначення цілком очевидно. При роботі в новому терміналі Windows (wt.exe) розмір шрифту можна змінити прямо в командному рядку за допомогою комбінацій клавіш <Ctrl>+<+> (збільшити шрифт) і <Ctrl>+<-> (зменшити шрифт). Зовнішній вигляд кожного доступного профілю в терміналі можна змінити за допомогою налаштувань терміналу на вкладці Appearance (мал. 4.6). Тут можна вибрати колірну схему і шрифт, задати форму курсору, встановити фонове зображення і т. Д.
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).
Тепер перейдемо до налаштування командного рядка. У 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 > ” }
Раніше ми розглянули, як можна налаштувати деякі аспекти оболонки 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.
Дякуємо нашій команді волонтерів за надану інформацію з відкритих джерел.