Гістарычна ўтыліты каманднага радка ў Unix-сістэмах развіты лепш чым у Windows, аднак са з'яўленнем новага рашэння сітуацыя змянілася.
Windows PowerShell дазваляе сістэмным адміністратарам аўтаматызаваць большасць руцінных задач. З яе дапамогай можна мяняць наладкі, спыняць і запускаць сэрвісы, а таксама вырабляць абслугоўванне большасці ўсталяваных прыкладанняў. Успрымаць сіняе акенца як яшчэ адзін інтэрпрэтатар каманд было б няправільна. Такі падыход не адлюстроўвае сутнасці прапанаваных карпарацыяй Microsoft інавацый. Насамрэч магчымасці Windows PowerShell значна шырэй: у невялікім цыкле артыкулаў мы паспрабуем разабрацца, чым рашэнне Microsoft адрозніваецца ад больш звыклых нам сродкаў.
асноўныя магчымасці
Зразумела 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-сістэм.
Для працы з абалонкай трэба запомніць некаторыя спалучэнні клавіш:
- Стрэлкі уверх і ўніз пракручваюць гісторыю для паўтору раней набраных каманд;
- Стрэлка направа ў канцы радка перанабірае папярэднюю каманду пасімвольна;
- Ctrl+Home выдаляе набраны тэкст ад пазіцыі курсора да пачатку радка;
- Ctrl+End выдаляе тэкст ад курсора да канца радка.
F7 паказвае акно з набранымі камандамі і дазваляе абраць адну з іх. У кансолі таксама працуе вылучэнне тэксту мышшу, капіпаст, пазіцыянаванне курсора, выдаленне, backspace - усё як мы любім.
Windows PowerShell ISE з'яўляецца паўнавартасным асяроддзем распрацоўкі з які падтрымлівае ўкладкі і падсвятленне сінтаксісу рэдактарам кода, канструктарам каманд, убудаваным адладчыкам і іншымі праграмісцкімі радасцямі. Калі ў рэдактары асяроддзя распрацоўкі пасля імя каманды напісаць знак злучок, вы атрымаеце ў выпадальным спісе ўсе даступныя параметры з указаннем тыпу. Запусціць PowerShell ISE можна альбо праз цэтлік з сістэмнага меню, альбо з дапамогай выкананага файла powershell_ise.exe.
Камандлеты
У 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
Па змаўчанні каманда адлюстроўвае кароткую даведку, але ў камандлеты пры неабходнасці перадаюцца параметры (аргументы). З іх дапамогай можна, напрыклад, атрымаць дэталёвую (параметр -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:
Сцэнары, функцыі, модулі і мова PowerShell
Скрыпты Windows PowerShell захоўваюцца ў выглядзе звычайных тэкставых файлаў з пашырэннем .ps1. Запусціць іх падвойным клікам нельга: трэба правай кнопкай мышы выклікаць кантэкстнае меню і абраць пункт "Запусціць у PowerShell". З кансолі прыйдзецца альбо пазначыць поўны шлях да скрыпту, альбо перайсці ў адпаведны каталог і напісаць імя файла. Запуск сцэнарыяў таксама абмежаваны сістэмнай палітыкай, а для праверкі бягучых настроек можна выкарыстоўваць камандлет Get-ExecutionPolicy, які выдасць адно з наступных значэнняў:
Restricted
- запуск сцэнарыяў забаронены (па змаўчанні);
AllSigned
- Дазволены толькі запуск падпісаных давераным распрацоўшчыкам сцэнарыяў;
RemoteSigned
- Дазволены запуск падпісаных і ўласных сцэнарыяў;
Unrestricted
- Дазволены запуск любых сцэнарыяў.
У адміністратара ёсць два варыянты дзеянняў. Найбольш бяспечны мяркуе падпісанне скрыптоў, але гэта даволі сур'ёзнае вядзьмарства - мы будзем разбірацца з ім у наступных артыкулах. Цяпер пойдзем па шляху найменшага супраціву і памяняем палітыку:
Set-ExecutionPolicy RemoteSigned
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
Спачатку выконваецца камандлет 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 можна маніпуляваць, ведаючы іх імёны. Для пачатку навучымся іх адлюстроўваць:
Get-Job
Цяпер пакажам вынік працы задання Job1:
Receive-Job Job1 | more
Усё даволі проста.
Выдаленае выкананне каманд
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
Таксама можна скарыстацца камандлетам:
Get-Variable -Name PSVersionTable –ValueOnly
Тое самае робіцца і з дапамогай камандлета Get-Host. Насамрэч варыянтаў мноства, але для іх ужывання трэба вывучыць мову праграмавання PowerShell, чым мы і зоймемся ў
Вынікі
Карпарацыі Microsoft атрымалася стварыць сапраўды магутную камандную абалонку з зручным інтэграваным асяроддзем для распрацоўкі скрыптоў. Ад звыклых нам па свеце Unix сродкаў яе адрознівае глыбокая інтэграцыя з аперацыйнымі сістэмамі сямейства Windows, а таксама з праграмным забеспячэннем для іх і платформай. NET Core. PowerShell можна назваць аб'ектна арыентаванай абалонкай, таму што камандлеты і прыстасаваныя функцыі вяртаюць аб'екты ці масівы аб'ектаў і могуць атрымліваць іх на ўваходзе. Думаем, гэтай прыладай павінны валодаць усе адміністратары сервераў на Windows: мінуў час, калі яны маглі абыйсціся без каманднага радка. Прасунутая кансольная абалонка асабліва неабходна на
Толькі зарэгістраваныя карыстачы могуць удзельнічаць у апытанні.
Якія тэмы варта ў першую чаргу закрануць у наступных артыкулах цыклу?
-
53,2%Праграмаванне ў PowerShell123
-
42,4%Функцыі і модулі PowerShell98
-
22,1%Як падпісваць уласныя скрыпты?51
-
12,1%Праца са сховішчамі праз пастаўшчыкоў (providers)28
-
57,6%Аўтаматызацыя адміністравання кампутараў з дапамогай PowerShell133
-
30,7%Кіраванне праграмным забеспячэннем і ўбудаванне выкананых кампанентаў PowerShell у іншыя прадукты71
Прагаласаваў 231 карыстальнік. Устрымаліся 37 карыстальнікаў.
Крыніца: habr.com