Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці

Гістарычна ўтыліты каманднага радка ў Unix-сістэмах развіты лепш чым у Windows, аднак са з'яўленнем новага рашэння сітуацыя змянілася.

Windows PowerShell дазваляе сістэмным адміністратарам аўтаматызаваць большасць руцінных задач. З яе дапамогай можна мяняць наладкі, спыняць і запускаць сэрвісы, а таксама вырабляць абслугоўванне большасці ўсталяваных прыкладанняў. Успрымаць сіняе акенца як яшчэ адзін інтэрпрэтатар каманд было б няправільна. Такі падыход не адлюстроўвае сутнасці прапанаваных карпарацыяй Microsoft інавацый. Насамрэч магчымасці Windows PowerShell значна шырэй: у невялікім цыкле артыкулаў мы паспрабуем разабрацца, чым рашэнне Microsoft адрозніваецца ад больш звыклых нам сродкаў.

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці

асноўныя магчымасці 

Зразумела Windows PowerShell – гэта ў першую чаргу камандная абалонка з мовай сцэнараў, першапачаткова створаная на аснове платформы. NET Framework, а пазней – на. NET Core. У адрозненне ад прымаючых і якія вяртаюць тэкставыя дадзеныя абалонак, Windows PowerShell працуе з класамі. NET, у якіх ёсць уласцівасці і метады. PowerShell дазваляе выконваць звычайныя каманды, а таксама дае доступ да аб'ектаў COM, WMI і ADSI. У ёй выкарыстоўваюцца розныя сховішчы, накшталт файлавай сістэмы ці рэестра Windows, для доступу да якіх створаны т.зв. пастаўшчыкі (providers). Варта адзначыць магчымасць убудавання выкананых кампанентаў PowerShell у іншыя прыкладанні для рэалізацыі розных аперацый, у т.л. праз графічны інтэрфейс. Правільна і адваротнае: шматлікія прыкладанні для Windows падаюць доступ да сваіх інтэрфейсаў кіравання праз PowerShell. 

Windows PowerShell дазваляе:

  • Змяняць наладкі аперацыйнай сістэмы;
  • Кіраваць службамі і працэсамі;
  • Наладжваць ролі і кампаненты сервера;
  • Усталёўваць праграмнае забеспячэнне;
  • Кіраваць устаноўленым ПЗ праз спецыяльныя інтэрфейсы;
  • Убудоўваць выкананыя кампаненты ў іншыя праграмы;
  • Ствараць сцэнары для аўтаматызацыі задач адміністравання;
  • Працаваць з файлавай сістэмай, рэестрам Windows, сховішчам сертыфікатаў і т.д.

Абалонка і асяроддзе распрацоўкі

Існуе Windows PowerShell у двух выявах: апроч эмулятара кансолі з каманднай абалонкай ёсць інтэграванае асяроддзе сцэнараў (Integrated Scripting Environment — ISE). Каб атрымаць доступ да інтэрфейсу каманднага радка дастаткова выбраць адпаведны ярлык у меню Windows або запусціць powershell.exe з меню "Выканаць". На экране з'явіцца сіняе акенца, прыкметна адрознае па магчымасцях ад дапатопнага cmd.exe. Тамака ёсць аўтададатак і іншыя фішкі, звыклыя карыстачам камандных абалонак для Unix-сістэм.

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці

Для працы з абалонкай трэба запомніць некаторыя спалучэнні клавіш:

  • Стрэлкі уверх і ўніз пракручваюць гісторыю для паўтору раней набраных каманд;
  • Стрэлка направа ў канцы радка перанабірае папярэднюю каманду пасімвольна;
  • Ctrl+Home выдаляе набраны тэкст ад пазіцыі курсора да пачатку радка;
  • Ctrl+End выдаляе тэкст ад курсора да канца радка.

F7 паказвае акно з набранымі камандамі і дазваляе абраць адну з іх. У кансолі таксама працуе вылучэнне тэксту мышшу, капіпаст, пазіцыянаванне курсора, выдаленне, backspace - усё як мы любім.

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці
Windows PowerShell ISE з'яўляецца паўнавартасным асяроддзем распрацоўкі з які падтрымлівае ўкладкі і падсвятленне сінтаксісу рэдактарам кода, канструктарам каманд, убудаваным адладчыкам і іншымі праграмісцкімі радасцямі. Калі ў рэдактары асяроддзя распрацоўкі пасля імя каманды напісаць знак злучок, вы атрымаеце ў выпадальным спісе ўсе даступныя параметры з указаннем тыпу. Запусціць PowerShell ISE можна альбо праз цэтлік з сістэмнага меню, альбо з дапамогай выкананага файла powershell_ise.exe.

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці

Камандлеты 

У Windows PowerShell з'явіліся т.зв. камандлеты (cmdlets). Гэта спецыялізаваныя класы. NET, у якія закладзена разнастайная функцыянальнасць. Завуцца яны па прынцыпе «Дзеянне-Аб'ект» (або «Дзеяслоў-Назоўнік, калі вам так больш падабаецца), а падзеленая злучком звязак нагадвае выказнік і дзейнік у сказах натуральных моў. Напрыклад, Get-Help літаральна азначае "Атрымаць-Дапамога" або ў кантэксце PowerShell: "Паказаць-Даведку". У сутнасці гэта аналог каманды man у Unix-сістэмах і мануалы ў PowerShell трэба запытваць менавіта так, а не выклікаючы камандлеты з ключом -help ці /?.. Не варта забываць і аб анлайн-дакументацыі па PowerShell: у Microsoft яна досыць падрабязная.

Акрамя Get у камандлетах для абазначэння дзеянняў выкарыстоўваюцца і іншыя дзеясловы (і не толькі дзеясловы, строга кажучы). У спісе ніжэй мы прывядзем некалькі прыкладаў:

Add - дадаць;
Clear - ачысціць;
Enable - Уключыць;
Disable - выключыць;
New - стварыць;
Remove - Выдаліць;
Set - задаць;
Start - запусціць;
Stop - спыніць;
Export - экспартаваць;
Import - імпартаваць.

Ёсць сістэмныя, карыстацкія і апцыянальныя камандлеты: у выніку выкананні ўсе яны вяртаюць аб'ект ці масіў аб'ектаў. Да рэгістра яны не адчувальныя, г.зн. з пункта гледжання інтэрпрэтатара каманд няма розніцы паміж Get-Help і get-help. Для падзелу выкарыстоўваецца сімвал ';', але ставіць яго абавязкова толькі калі ў адным радку выконваецца некалькі камандлетаў. 

Камандлеты Windows PowerShell групуюцца ў модулі (NetTCPIP, Hyper-V і г.д.), а для пошуку па аб'екце і дзеянню існуе камандлет Get-Command. Паказаць даведку па ім можна так:

Get-Help Get-Command

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці

Па змаўчанні каманда адлюстроўвае кароткую даведку, але ў камандлеты пры неабходнасці перадаюцца параметры (аргументы). З іх дапамогай можна, напрыклад, атрымаць дэталёвую (параметр -Detailed) ці поўную (параметр -Full) даведку, а таксама вывесці на экран прыклады (параметр -Examples):

Get-Help Get-Command -Examples

Даведка у Windows PowerShell абнаўляецца камандлетам Update-Help. Калі радок каманд атрымліваецца занадта доўгім, аргументы камандлета можна перанесці на наступную, напісаўшы службовы знак ''' і націснуўшы Enter - проста скончыць пісаць каманду на адным радку і працягнуць на іншы не атрымаецца.

Ніжэй прывядзем некалькі прыкладаў распаўсюджаных камандлетаў: 

Get-Process - паказаць запушчаныя ў сістэме працэсы;
Get-Service - паказаць службы і іх статус;
Get-Content - вывесці змесціва файла.

Для часта выкарыстоўваных камандлетаў і вонкавых утыліт у Windows PowerShell ёсць кароткія сінонімы - аліясы (ад англ. Alias). Напрыклад, dir - аліяс Get-ChildItem. Ёсць у спісе сінонімаў і аналогі каманд з Unix-сістэм (ls, ps і т.д.), а камандлет Get-Help выклікаецца камандай help. Поўны спіс сінонімаў можна паглядзець з дапамогай камандлета Get-Alias:

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці

Сцэнары, функцыі, модулі і мова PowerShell

Скрыпты Windows PowerShell захоўваюцца ў выглядзе звычайных тэкставых файлаў з пашырэннем .ps1. Запусціць іх падвойным клікам нельга: трэба правай кнопкай мышы выклікаць кантэкстнае меню і абраць пункт "Запусціць у PowerShell". З кансолі прыйдзецца альбо пазначыць поўны шлях да скрыпту, альбо перайсці ў адпаведны каталог і напісаць імя файла. Запуск сцэнарыяў таксама абмежаваны сістэмнай палітыкай, а для праверкі бягучых настроек можна выкарыстоўваць камандлет Get-ExecutionPolicy, які выдасць адно з наступных значэнняў:

Restricted - запуск сцэнарыяў забаронены (па змаўчанні);
AllSigned - Дазволены толькі запуск падпісаных давераным распрацоўшчыкам сцэнарыяў;
RemoteSigned - Дазволены запуск падпісаных і ўласных сцэнарыяў;
Unrestricted - Дазволены запуск любых сцэнарыяў.

У адміністратара ёсць два варыянты дзеянняў. Найбольш бяспечны мяркуе падпісанне скрыптоў, але гэта даволі сур'ёзнае вядзьмарства - мы будзем разбірацца з ім у наступных артыкулах. Цяпер пойдзем па шляху найменшага супраціву і памяняем палітыку:

Set-ExecutionPolicy RemoteSigned

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці
PowerShell для гэтага давядзецца запусціць ад імя адміністратара, хоць з дапамогай спецыяльнага параметру можна змяніць палітыку і для бягучага карыстальніка.

Пішуцца скрыпты на аб'ектна-арыентаванай мове праграмавання, каманды якога называюцца па тым жа прынцыпу, што і разгледжаныя раней камандлеты: "Дзеянне-Аб'ект" ("Дзеяслоў-Назоўнік"). Асноўнае яго прызначэнне - аўтаматызацыя задач адміністравання, але гэта паўнавартасная інтэрпрэтаваная мова, у якім ёсць усе неабходныя канструкцыі: умоўны пераход, цыклы, зменныя, масівы, аб'екты, апрацоўка памылак і г.д. Для напісання сцэнарыяў падыходзіць любы тэкставы рэдактар, але зручней за ўсё запусціць Windows PowerShell ISE.

У скрыпт можна перадаваць параметры, рабіць іх абавязковымі, а таксама задаваць значэнні па змаўчанні. Акрамя таго Windows PowerShell дазваляе стварыць функцыі і выклікаць іх сапраўды гэтак жа, як і камандлеты: для гэтага выкарыстоўваецца канструкцыя Function і фігурныя дужкі. Сцэнар з функцыямі называецца модулем і мае пашырэнне. PSM1. Модулі павінны захоўвацца ў каталогах, вызначаных у зменных асяроддзі PowerShell. Паглядзець іх можна пры дапамозе наступнай каманды:

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

Канвееры

У апошнім прыкладзе мы ўжылі знаёмую карыстачам абалонак для Unix-сістэм канструкцыю. У Windows PowerShell вертыкальная рыса таксама дазваляе перадаць вынахад адной каманды на ўваход іншай, але ў рэалізацыі канвеера ёсць і істотная розніца: гаворка тут ідзе ўжо не аб наборы знакаў або нейкім тэксце. Убудаваныя камандлеты ці карыстацкія функцыі вяртаюць аб'екты ці масівы аб'ектаў, а таксама могуць атрымліваць іх на ўваходзе. Як у Bourne shell і яго шматлікіх паслядоўніках, у PowerShell з дапамогай канвеера спрашчаецца выкананне складаных задач.

Найпросты прыклад канвеера выглядае так:

Get-Service | Sort-Object -property Status

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці
Спачатку выконваецца камандлет Get-Service, а потым усе атрыманыя ім службы перадаюцца на сартаванне па ўласцівасці Status камандлету Sort-Object. У які менавіта аргумент перадаецца вынік працы папярэдняга ўчастку канвеера, залежыць ад яго тыпу звычайна гэта InputObject. Больш падрабязна гэтае пытанне будзе разглядацца ў прысвечанай мове праграмавання PowerShell артыкуле. 

Пры жаданні ланцужок можна працягнуць і перадаць вынік працы Sort-Object яшчэ аднаму камандлета (выконвацца яны будуць злева направа). Дарэчы, карыстачам Windows даступная і звыклая ўсім юніксоідам канструкцыя для пастаронкавай высновы: 

Get-Service | Sort-Object -property Status | more

Запуск задач у фонавым рэжыме 

Даволі часта бывае трэба запусціць нейкую каманду ў фоне, каб не чакаць выніку яе выканання ў сесіі абалонкі. У Windows PowerShell ёсць некалькі камандлетаў на такі выпадак:

Start-Job - запуск фонавай задачы;
Stop-Job - Прыпынак фонавай задачы;
Get-Job - Прагляд спісу фонавых задач;
Receive-Job - Прагляд выніку выканання фонавай задачы;
Remove-Job - выдаленне фонавай задачы;
Wait-Job - Перавод фонавай задачы назад у кансоль.

Для запуску фонавай задачы мы выкарыстоўваем камандлет Start-Job і ў фігурных дужках паказваем каманду ці набор каманд:

Start-Job {Get-Service}

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці
Фонавымі задачамі ў Windows PowerShell можна маніпуляваць, ведаючы іх імёны. Для пачатку навучымся іх адлюстроўваць:

Get-Job

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці
Цяпер пакажам вынік працы задання Job1:

Receive-Job Job1 | more

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці
Усё даволі проста.

Выдаленае выкананне каманд

Windows PowerShell дазваляе выконваць каманды і сцэнары не толькі на лакальным, але і на выдаленым кампутары і нават на цэлай групе машын. Для гэтага існуе некалькі спосабаў:

  • У многіх камандлетаў ёсць параметр -ComputerName, але такім спосабам не атрымаецца, напрыклад, стварыць канвеер;
  • Камандлет Enter-PSSession дазваляе стварыць на выдаленай машыне інтэрактыўны сеанс; 
  • З дапамогай камандлета Invoke-Command можна выконваць каманды ці сцэнары на адным ці некалькіх выдаленых кампутарах.

Версіі PowerShell

З моманту першага рэлізу ў 2006 году PowerShell сур'ёзна змяніўся. Інструмент даступны для мноства сістэм, якія працуюць на розных апаратных платформах (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux і OS X. Апошні рэліз 6.2 выпушчаны 10 студзеня 2018 года. Напісаныя для больш ранніх версій скрыпты з высокай верагоднасцю будуць працаваць у пазнейшых, а вось са зваротным пераносам могуць узнікнуць праблемы, паколькі за гады развіцця ў PowerShell з'явілася вялікая колькасць новых камандлетаў. Даведацца версію ўсталяванай на кампутары каманднай абалонкі можна з дапамогай уласцівасці PSVersion убудаванай зменнай $PSVersionTable:

$PSVersionTable.PSVersion

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці
Таксама можна скарыстацца камандлетам:

Get-Variable -Name PSVersionTable –ValueOnly

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці
Тое самае робіцца і з дапамогай камандлета Get-Host. Насамрэч варыянтаў мноства, але для іх ужывання трэба вывучыць мову праграмавання PowerShell, чым мы і зоймемся ў наступным артыкуле

Вынікі 

Карпарацыі Microsoft атрымалася стварыць сапраўды магутную камандную абалонку з зручным інтэграваным асяроддзем для распрацоўкі скрыптоў. Ад звыклых нам па свеце Unix сродкаў яе адрознівае глыбокая інтэграцыя з аперацыйнымі сістэмамі сямейства Windows, а таксама з праграмным забеспячэннем для іх і платформай. NET Core. PowerShell можна назваць аб'ектна арыентаванай абалонкай, таму што камандлеты і прыстасаваныя функцыі вяртаюць аб'екты ці масівы аб'ектаў і могуць атрымліваць іх на ўваходзе. Думаем, гэтай прыладай павінны валодаць усе адміністратары сервераў на Windows: мінуў час, калі яны маглі абыйсціся без каманднага радка. Прасунутая кансольная абалонка асабліва неабходна на нашых недарагіх VPS, якія працуюць пад кіраваннем Windows Server Core, але гэта ўжо зусім іншая гісторыя.

Што такое Windows PowerShell і з чым яго ядуць? Частка 1: асноўныя магчымасці

Толькі зарэгістраваныя карыстачы могуць удзельнічаць у апытанні. Увайдзіце, Калі ласка.

Якія тэмы варта ў першую чаргу закрануць у наступных артыкулах цыклу?

  • 53,2%Праграмаванне ў PowerShell123

  • 42,4%Функцыі і модулі PowerShell98

  • 22,1%Як падпісваць уласныя скрыпты?51

  • 12,1%Праца са сховішчамі праз пастаўшчыкоў (providers)28

  • 57,6%Аўтаматызацыя адміністравання кампутараў з дапамогай PowerShell133

  • 30,7%Кіраванне праграмным забеспячэннем і ўбудаванне выкананых кампанентаў PowerShell у іншыя прадукты71

Прагаласаваў 231 карыстальнік. Устрымаліся 37 карыстальнікаў.

Крыніца: habr.com

Дадаць каментар