Պատմականորեն հրամանային տողերի գործիքը Unix համակարգերում ավելի լավ զարգացել է, քան Windows-ում, սակայն նոր լուծման появлением իրավիճակը փոխվել է:
Windows PowerShell-ն համակարգի ադմինիստրատորներին հնարավորություն է տալիս ավտոմատացնել շատ ռутинային աշխատանքներ: Այն թույլ է տալիս փոփոխել կարգավորումները, կանգնեցնել և սկսել ծառայությունները, ինչպես նաև սպասարկել մեծ մասի տեղադրված ծրագրեր: Կապիտանցը կապել սինյու դաշտը որպես ևս մեկ հրամանների մեկնաբանիչ սխալ կլինի: Այդ մոտեցումը չի արտահայտում Microsoft-ի կողմից առաջարկվող նորույթների էությունը: Ի տարբերություն, Windows PowerShell-ի հնարավորությունները մեծ են. մի շարք հոդվածներում մենք կփորձենք հասկանալ, թե ինչով Microsoft-ի լուծումը տարբերվում ավելի սովորական միջոցներից:
Հիմնական հնարավորություններ
Ինշանդրական Windows PowerShell-ը գրեթե անկախ բերան-խմբաքար ճյուղի լեզուն է, որը սկզբում ստեղծվել է .NET Framework-ի հիման վրա, իսկ հետագայում ՝ .NET Core վրա: Ի տարբերություն տեքստային տվյալներ ընդունող և վերադարձնող խմբաքարային ծրագրերի, Windows PowerShell-ը աշխատում է .NET դասերի հետ, որոնք ունեն հատկություններ և մեթոդներ: PowerShell-ը թույլ է տալիս կատարել սովորական հրամաններ, ինչպես նաև հասանելիություն է տալիս COM, WMI և ADSI օբյեկտներին: Այն օգտագործում է տարբեր պահեստներ, ինչպիսիք են ֆայլային համակարգը կամ Windows-ի գրանցամատյան, որոնց հասանելիություն ապահովվում է zogenaamde մատակարարների միջոցով: Ակնհայտ է, որ 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-ից, կոմանդլետներում գործողությունների խորհրդանիշները օգտագործվում են նաեւ այլ արարողություններ (և ոչ միայն արարողություններ, խիստ խոսելով): Ստորև կարող եք տեսնել մի քանի օրինակներ:
Ավելացնել — ավելացնել;
Clear — մաքրել;
Enable — հնարավոր դարձնել;
Disable — անջատել;
New — ստեղծել;
Remove — հեռացնել;
Set — սահմանել;
Start — սկսել;
Stop — կանգնեցնել;
Հրապարակել — արտահանել;
— դա տվելների պահպանման համակարգը (օպերացիոն համակարգը).. — ներմուծել:
Պաշտպանված, օգտագործողների և ընտրովի կոմանդլետներ կան. նրանց գործառույթից ազատվելու արդյունքում նրանք բոլորը վերադարձնում են օբյեկտ կամ օբյեկտների զանգված: Նախարարն անհարկի չէ, այն է, որ կատարման տեսանկյունից կիրառումայինների համար մտքեր չեն գոյանում միջեւ Get-Help և get-help: Դրանում տարածման համար օգտագործվում է ‘;’ նշանը, սակայն այն անհրաժեշտ է միայն եթե մեկ տողի մեջ կատարվում են մի քանի կոմանդլետներ:
Windows PowerShell կոմանդլետները խմբավորվում են մոդուլներում (NetTCPIP, Hyper-V և այլ) և օբյեկտին և գործողությանը որոնելու համար գոյություն ունի Get-Command կոմանդլետը: Հրահանգի մասին աջակցությունն ստանալու համար դուք կարող եք կատարել հետևյալը:
Get-Help Get-Command 
Անվանիվից, հրահանգի համագործակցությունը տալիս է համառոտ աջակցություն, սակայն անհրաժեշտության դեպքում կոմանդլետներում փոխանցվում են պարամետրեր (արգումենտներ): Նրանց օգնությամբ կարող եք, օրինակ, ստանալ մանրամասն (–Detailed պարամետր), կամ ամբողջական (–Full պարամետր) աջակցություն, ինչպես նաև ցուցադրել էկրանում օրինակներ (–Examples պարամետր):
Get-Help Get-Command -ExamplesWindows PowerShell-ի օգնությունը թարմացվում է Update-Help կոմանդլետով: Եթե կոմանդի տողը չափազանց երկար է, կոմանդլետի արգումենտները կարելի է տեղափոխել հաջորդ շարքում՝ գրելով հատուկ օբյեկտ '`' և սեղմելով Enter՝ պարզապես ավարտելով հրամանը մեկ շարքում և շարունակելով մյուս շարվածքում՝ դա չի հաջողվի.
Ներդրվում ենք մի քանի տարածված կոմանդլետների օրինակներ.
Get-Process — ցույց տալ համակարգում գործարկված գործընթացները.
Get-Service — ցույց տալ սպասարկումները և նրանց կարգավիճակը.
Get-Content — դուրս բերել ֆայլի բովանդակությունը.
Ամենաք Frequently օգտագործվող կոմանդլետների և արտաքին գործիքների համար Windows PowerShell-ում կան կարճ սինոնիմներ՝ ալիասներ (անգլ. Alias). Օրինակ, dir — ալիաս Get-ChildItem. Սինոնիմներ ցուցակում կան նաև Unix համակարգերից аналогներ (ls, ps և այլն), իսկ Get-Help կոմանդլետը կարելի է հրավիրել help կոմանդով. Сինոնիմների ամբողջական ցուցակը կարելի է տեսնել Get-Alias կոմանդլետով.

Սցենարաններ, ֆունկցիաներ, մոդուլները և PowerShell լեզուն
Windows PowerShell-ի սցենարանները պահպանվում են պարզ տեքստային ֆայլերի տեսքով, որոնց ընդլայնումը .ps1 է. Մինչև դրանք չի կարելի գործարկել կրկնակ սեղմումով. անհրաժեշտ է մեկանգամյա սեղմումով բացել համատեքստային մենյու և ընտրել 'Run with PowerShell' տարբերակը: Կոնսոլում հարկավոր կլինի կամ նշել սցենարի լրիվ ուղին, կամ անցնել համապատասխան կատեգորիա և գրել ֆայլի անունը. Սցենարների գործարկումը նույնպես սահմանափակվում է համակարգային քաղաքականությամբ, իսկ ընթացիկ կարգավորումները ստուգելու համար կարելի է օգտագործել Get-ExecutionPolicy կոմանդլետը, որը կտա հետևյալ արժեքներից մեկը:
Restricted — սցենարների գործարկումը արգելվում է (ժամանակակից կարգ)(default);
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-ում ուղիղ գծի միջոցով հեշտանում է բարդ խնդիրների կատարումը.
Պարզագույն ուղիղ գծի օրինակնlooks like this:
Get-Service | Sort-Object -property Status 
Նախապես կատարում է Get-Service հրամանը, ապա ստացված բոլոր ծառայությունները փոխանցվում են Sort-Object հրամանին `Status` հատկության համաձայն: Որոշակի պարամետրին փոխանցվում է նախորդը, կախված է նրա տեսակից - սովորաբար դա 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-ը թույլ է տալիս հրամաններ և սկրիպտեր կատարել ոչ միայն տեղական, այլ նաև հեռավոր համակարգիչների վրա, նույնիսկ ամբողջ խմբի համար: Սա իրականացնելու մի քանի եղանակներ կան:
- Շատ commandlet-ներում կա պարամետր
-ComputerName, բայց այս եղանակով, օրինակ, հնարավոր չէ ստեղծել խողովակ; - Commandlet
Enter-PSSessionթույլ է տալիս ստեղծել հեռավոր համակարգչում ինտերակտիվ seans; - Commandlet-ով
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-ը թողարկվել է 2018 թվականի հոկտեմբերի 10-ին: Նախորդ տարբերակների համար գրված սկրիպտները հնարավոր է, որ աշխատեն նորերին, սակայն հետադարձ փոխադրության հետ կարող են խնդիրներ առաջանալ, քանի որ PowerShell-ի զարգացման ընթացքում շատ նոր commandlet-ներ են հայտնվել: Իրենք համակարգչից տեղադրված հրամանատանու տարբերակը կարող եք իմանալ $PSVersionTable փոփոխականի PSVersion հատկությամբ:
$PSVersionTable.PSVersion 
Также можно воспользоваться командлетом:
Get-Variable -Name PSVersionTable –ValueOnly 
То же самое делается и с помощью командлета Get-Host. На самом деле вариантов множество, но для их применения нужно изучить язык программирования PowerShell, чем мы и займемся в .
Եզրակացություններ
Microsoft ընկերությանը հաջողվեց ստեղծել իսկապես հզոր հրամանատոն, որը հարմար ինտեգրված միջավայր ունի սկրիպտերի մշակման համար: Unix աշխարհում մեզ ծանոթ միջոցներից այն առանձնանում է Windows ընտանիքի գործող համակարգերի և դրանց համար ծրագրային ապահովման և .NET Core-ին վրա խորքային ինտեգրացմամբ: PowerShell-ը կարելի է անվանել օբյեկտ-օգտագործվող հրամանատո, որովհետև commandlet-ները և օգտվողի գործառույթներն վերադարձնում են օբյեկտներ կամ օբյեկտների զանգվածներ և կարող են ստանալ դրանք որպես մուտքի: Մենք կարծում ենք, որ այս գործիքով պետք է տիրապետեն բոլոր Windows սերվերի ադմինիստրատորները: Ժամանակը անցել է, երբ նրանք կարող էին առանց հրամանատողի կողմնորոշվել: Գործի advanced console shell-ը հատկապես անհրաժեշտ է մեր մատչելի VPS-ներում, որոնք պետք է գործեն Windows Server Core-ի տակ, բայց դա արդեն մեկ այլ պատմություն է: , բայց դա արդեն համեստ պատմություն է:
Պատասխանելու համար պետք է գրանցված օգտվող լինել։ , խնդրում եմ։
Ի՞նչ թեմաներ նախապատրաստել հաջորդ հոդվածների շարքում:
53,2%PowerShell-ում ծրագրավորում123
42,4%PowerShell-ի գործառույթներ և մոդուլներ98
22,1%Ինչպե՞ս ստորագրել սեփական սկրիպտները:51
12,1%Համակարգիչների վարչումը PowerShell-ով 28
57,6%Համակարգչային ադմինիստրացված վարչությունները PowerShell-ով ավտոմատացում133
30,7%Ծրագրային ապահովման կառավարման և PowerShell-ի կիրառում այլ արտադրանքներում71
231 օգտվողներ ձայնեցին։ 37 օգտվողներ հրաժարվեցին։
Ընտանիք: habr.com
