Պատմականորեն, Unix համակարգերում հրամանի տող կոմունալ ծառայություններն ավելի լավ են զարգացած, քան Windows-ում, սակայն նոր լուծման հայտնվելով իրավիճակը փոխվել է:
Windows PowerShell-ը թույլ է տալիս համակարգի ադմինիստրատորներին ավտոմատացնել առօրյա առաջադրանքների մեծ մասը: Նրա օգնությամբ դուք կարող եք փոխել կարգավորումները, դադարեցնել և սկսել ծառայությունները, ինչպես նաև կատարել տեղադրված հավելվածների մեծ մասի սպասարկում: Սխալ կլիներ կապույտ պատուհանը ընկալել որպես մեկ այլ հրամանի թարգմանիչ: Այս մոտեցումը չի արտացոլում Microsoft-ի առաջարկած նորարարությունների էությունը։ Փաստորեն, Windows PowerShell-ի հնարավորությունները շատ ավելի լայն են. կարճ հոդվածների շարքում մենք կփորձենք պարզել, թե ինչպես է Microsoft-ի լուծումը տարբերվում մեզ ավելի ծանոթ գործիքներից:
Հիմնական հատկանիշները
Իհարկե, Windows PowerShell-ը հիմնականում հրամանի կեղև է՝ սկրիպտավորման լեզվով, որն ի սկզբանե կառուցվել է .NET Framework-ի, իսկ ավելի ուշ՝ .NET Core-ի վրա: Ի տարբերություն շելերի, որոնք ընդունում և վերադարձնում են տեքստային տվյալներ, Windows PowerShell-ն աշխատում է .NET դասերի հետ, որոնք ունեն հատկություններ և մեթոդներ։ PowerShell-ը թույլ է տալիս գործարկել ընդհանուր հրամաններ, ինչպես նաև հնարավորություն է տալիս մուտք գործել COM, WMI և ADSI օբյեկտներ: Այն օգտագործում է տարբեր պահեստներ, ինչպիսիք են ֆայլային համակարգը կամ Windows ռեեստրը, որոնց մուտքի համար այսպես կոչված. մատակարարներ. Հարկ է նշել PowerShell-ի գործարկվող բաղադրիչները այլ հավելվածների մեջ ներդնելու հնարավորությունը՝ տարբեր գործողություններ իրականացնելու համար, ներառյալ. գրաֆիկական ինտերֆեյսի միջոցով: Ճիշտ է նաև հակառակը՝ Windows-ի շատ հավելվածներ PowerShell-ի միջոցով ապահովում են իրենց կառավարման ինտերֆեյսերի հասանելիությունը:
Windows PowerShell-ը թույլ է տալիս.
- Փոխել օպերացիոն համակարգի կարգավորումները;
- Կառավարել ծառայությունները և գործընթացները;
- Կարգավորել սերվերի դերերը և բաղադրիչները;
- Ծրագրաշարի տեղադրում;
- Կառավարեք տեղադրված ծրագրակազմը հատուկ միջերեսների միջոցով;
- Ներդրեք գործարկվող բաղադրիչները երրորդ կողմի ծրագրերում;
- Ստեղծեք սցենարներ՝ կառավարման առաջադրանքները ավտոմատացնելու համար;
- Աշխատեք ֆայլային համակարգի, Windows ռեեստրի, վկայագրերի պահեստի և այլնի հետ:
Shell և զարգացման միջավայր
Windows PowerShell-ը գոյություն ունի երկու ձևով. բացի հրամանի կեղևով կոնսոլի էմուլյատորից, կա ինտեգրված սցենարային միջավայր (ISE): Հրամանի տողի ինտերֆեյսին մուտք գործելու համար պարզապես ընտրեք համապատասխան դյուրանցումը Windows-ի ընտրացանկից կամ գործարկեք powershell.exe-ը Run ընտրացանկից: Էկրանին կհայտնվի կապույտ պատուհան, որն իր հնարավորություններով նկատելիորեն տարբերվում է հակահեղեղված cmd.exe-ից: Կան ավտոմատ լրացում և այլ առանձնահատկություններ, որոնք ծանոթ են Unix համակարգերի հրամանների վահանակների օգտագործողներին:
Կեղևի հետ աշխատելու համար հարկավոր է հիշել ստեղնաշարի մի քանի դյուրանցումներ.
- Վեր և վար սլաքները պտտվում են պատմության մեջ՝ նախկինում մուտքագրված հրամանները կրկնելու համար.
- Տողի վերջում գտնվող աջ սլաքը կրկնում է նախորդ հրամանի նիշ առ նիշ.
- Ctrl+Home-ը ջնջում է մուտքագրված տեքստը կուրսորի դիրքից մինչև տողի սկիզբը;
- Ctrl+End-ը ջնջում է տեքստը կուրսորից մինչև տողի վերջը:
F7-ը ցույց է տալիս մուտքագրված հրամաններով պատուհան և թույլ է տալիս ընտրել դրանցից մեկը: Վահանակը նաև աշխատում է՝ ընտրելով տեքստ մկնիկի միջոցով, պատճենահանել, կուրսորը տեղադրել, ջնջել, backspace՝ այն ամենը, ինչ մենք սիրում ենք:
Windows PowerShell ISE-ը զարգացման լիարժեք միջավայր է՝ կոդերի խմբագրիչով, որն աջակցում է ներդիրների և շարահյուսության ընդգծմանը, հրամանների դիզայներին, ներկառուցված վրիպազերծիչին և ծրագրավորման այլ հաճույքներին: Եթե մշակման միջավայրի խմբագրում հրամանի անունից հետո գծիկ եք գրում, բացվող ցանկում կստանաք բոլոր հասանելի պարամետրերը՝ նշելով տեսակը: Դուք կարող եք գործարկել PowerShell ISE-ը կամ համակարգի ընտրացանկից դյուրանցման միջոցով կամ օգտագործելով գործարկվող powershell_ise.exe ֆայլը:
Cmdlets
Windows PowerShell-ում այսպես կոչված. cmdlets. Սրանք մասնագիտացված .NET դասեր են, որոնք ապահովում են տարբեր գործառույթներ: Դրանք անվանվում են ըստ «Գործողություն-օբյեկտ» սկզբունքի (կամ «Բայ-Գոյական, եթե նախընտրում եք), իսկ գծիկով բաժանված կապակցականը հիշեցնում է նախադասությունն ու ենթական բնական նախադասությունների մեջ։ Օրինակ, Get-Help բառացիորեն նշանակում է «Օգնություն ստանալ» կամ PowerShell համատեքստում՝ «Ցույց տալ օգնություն»: Փաստորեն, սա Unix համակարգերում man հրամանի անալոգն է, և PowerShell-ի ձեռնարկները պետք է պահանջվեն այսպես, և ոչ թե կանչելով cmdlets –help կամ /? ստեղնով: Մի մոռացեք PowerShell-ի առցանց փաստաթղթերի մասին: Microsoft-ը դա բավականին մանրամասն է ներկայացնում:
Բացի Get-ից, cmdlet-ներն օգտագործում են նաև այլ բայեր՝ գործողություններ նշելու համար (և ոչ միայն բայերը, խստորեն ասած): Ստորև բերված ցանկում մենք տալիս ենք մի քանի օրինակ.
Add
- ավելացնել;
Clear
- մաքուր;
Enable
- միացնել;
Disable
- անջատել;
New
- ստեղծել;
Remove
- ջնջել;
Set
- հարցնել;
Start
- վազել;
Stop
- կանգառ;
Export
- արտահանում;
Import
- ներմուծում.
Կան համակարգի, օգտագործողի և ընտրովի cmdlets. կատարման արդյունքում նրանք բոլորը վերադարձնում են օբյեկտ կամ օբյեկտների զանգված: Նրանք մեծատառերի զգայուն չեն, այսինքն. Հրամանների թարգմանչի տեսակետից «Get-Help»-ի և «get-help»-ի միջև տարբերություն չկա: «;» նշանն օգտագործվում է տարանջատման համար, բայց դա պահանջվում է միայն այն դեպքում, եթե մի տողում մի քանի cmdlet են գործարկվում:
Windows PowerShell cmdlet-ները խմբավորված են մոդուլների մեջ (NetTCPIP, Hyper-V և այլն), և կա Get-Command cmdlet՝ ըստ օբյեկտների և գործողությունների որոնման համար: Դուք կարող եք օգնություն ցույց տալ դրա վերաբերյալ հետևյալ կերպ.
Get-Help Get-Command
Լռելյայնորեն հրամանը ցուցադրում է արագ օգնություն, սակայն պարամետրերը (արգումենտները) ըստ անհրաժեշտության փոխանցվում են cmdlets-ին: Նրանց օգնությամբ դուք կարող եք, օրինակ, ստանալ մանրամասն (-Detailed parameter) կամ ամբողջական (-Full) օգնություն, ինչպես նաև ցուցադրել օրինակներ (-Examples պարամետր).
Get-Help Get-Command -Examples
Windows PowerShell-ի օգնությունը թարմացվում է Update-Help cmdlet-ով: Եթե պարզվում է, որ հրամանների տողը չափազանց երկար է, ապա cmdlet-ի արգումենտները կարող են փոխանցվել հաջորդին` գրելով ծառայության նիշը «`» և սեղմելով Enter. պարզապես մի տողում հրաման գրելն ավարտելը և մյուսով շարունակելը չի աշխատի:
Ստորև բերված են սովորական cmdlet-ների մի քանի օրինակ.
Get-Process
— ցույց տալ համակարգում գործող գործընթացները.
Get-Service
— ցուցադրել ծառայությունները և դրանց կարգավիճակը.
Get-Content
- ցուցադրել ֆայլի բովանդակությունը:
Հաճախ օգտագործվող cmdlet-ների և արտաքին կոմունալ ծառայությունների համար Windows PowerShell-ն ունի կարճ հոմանիշներ՝ անուն-ազգանուններ: Օրինակ, dir-ը Get-ChildItem-ի կեղծանունն է: Հոմանիշների ցանկում կան նաև Unix համակարգերի հրամանների անալոգներ (ls, ps և այլն), իսկ Get-Help cmdlet-ը կանչվում է help հրամանով։ Հոմանիշների ամբողջական ցանկը կարելի է դիտել Get-Alias cmdlet-ի միջոցով.
PowerShell-ի սցենարներ, գործառույթներ, մոդուլներ և լեզու
Windows PowerShell սկրիպտները պահվում են որպես պարզ տեքստային ֆայլեր .ps1 ընդլայնմամբ: Դուք չեք կարող դրանք գործարկել կրկնակի սեղմելով. անհրաժեշտ է աջ սեղմել համատեքստի ընտրացանկը բացելու համար և ընտրել «Գործարկել PowerShell-ում»: Վահանակից կամ պետք է նշեք սկրիպտի ամբողջական ուղին, կամ գնաք համապատասխան գրացուցակ և գրեք ֆայլի անունը: Գործող սկրիպտները նույնպես սահմանափակված են համակարգի քաղաքականությամբ, և ընթացիկ կարգավորումները ստուգելու համար կարող եք օգտագործել Get-ExecutionPolicy cmdlet-ը, որը կվերադարձնի հետևյալ արժեքներից մեկը.
Restricted
— սկրիպտների գործարկումն արգելված է (լռելյայն);
AllSigned
— թույլատրվում է գործարկել միայն վստահելի ծրագրավորողի կողմից ստորագրված սցենարները.
RemoteSigned
- Թույլատրվում է գործարկել ստորագրված և սեփական սցենարներ;
Unrestricted
- Թույլատրվում է գործարկել ցանկացած սցենար:
Ադմինիստրատորն ունի երկու տարբերակ. Ամենաապահովը ներառում է սցենարների ստորագրում, բայց սա բավականին լուրջ կախարդություն է. մենք դրանով կզբաղվենք հաջորդ հոդվածներում: Հիմա գնանք նվազագույն դիմադրության ճանապարհով և փոխենք քաղաքականությունը.
Set-ExecutionPolicy RemoteSigned
Դա անելու համար դուք պետք է գործարկեք PowerShell-ը որպես ադմինիստրատոր, թեև կարող եք օգտագործել հատուկ պարամետր՝ ընթացիկ օգտագործողի քաղաքականությունը փոխելու համար:
Սցենարները գրված են օբյեկտ-կողմնորոշված ծրագրավորման լեզվով, որոնց հրամաններն անվանվել են նույն սկզբունքով, ինչ նախկինում քննարկված cmdlet-ները՝ «Գործողություն-օբյեկտ» («Բայ-Գոյական»): Դրա հիմնական նպատակը կառավարման առաջադրանքների ավտոմատացումն է, բայց դա լիարժեք մեկնաբանվող լեզու է, որն ունի բոլոր անհրաժեշտ կառուցվածքները՝ պայմանական թռիչք, հանգույցներ, փոփոխականներ, զանգվածներ, օբյեկտներ, սխալների մշակում և այլն։ Ցանկացած տեքստային խմբագրիչ հարմար է սկրիպտներ գրելու համար, բայց ամենահարմարն է Windows PowerShell ISE-ն գործարկել:
Դուք կարող եք պարամետրեր փոխանցել սկրիպտին, դրանք դարձնել պարտադիր, ինչպես նաև սահմանել լռելյայն արժեքներ: Windows PowerShell-ը նաև թույլ է տալիս ստեղծել և կանչել գործառույթներ այնպես, ինչպես cmdlet-ները՝ օգտագործելով Function կառուցվածքը և գանգուր փակագծերը: Ֆունկցիաներով սկրիպտը կոչվում է մոդուլ և ունի .psm1 ընդլայնում: Մոդուլները պետք է պահվեն PowerShell միջավայրի փոփոխականներում սահմանված դիրեկտորիաներում: Դուք կարող եք դրանք դիտել՝ օգտագործելով հետևյալ հրամանը.
Get-ChildItem Env:PSModulePath | Format-Table -AutoSize
Փոխակրիչներ
Վերջին օրինակում մենք օգտագործեցինք դիզայն, որը ծանոթ է Unix-ի պատյանների օգտագործողներին: Windows PowerShell-ում ուղղահայաց սանդղակը նաև թույլ է տալիս մի հրամանի ելքը փոխանցել մյուսի մուտքագրմանը, սակայն խողովակաշարի իրականացման մեջ զգալի տարբերություն կա. մենք այլևս չենք խոսում նիշերի կամ ինչ-որ տեքստի մասին: Ներկառուցված cmdlet-ները կամ օգտագործողի կողմից սահմանված գործառույթները վերադարձնում են օբյեկտներ կամ առարկաների զանգվածներ և կարող են նաև ստանալ դրանք որպես մուտքագրում: Ինչպես Bourne shell-ը և նրա բազմաթիվ իրավահաջորդները, PowerShell-ն օգտագործում է խողովակաշար՝ բարդ առաջադրանքները պարզեցնելու համար:
Խողովակաշարի ամենապարզ օրինակն ունի հետևյալ տեսքը.
Get-Service | Sort-Object -property Status
Սկզբում գործարկվում է Get-Service cmdlet-ը, այնուհետև նրա ստացած բոլոր ծառայությունները փոխանցվում են Sort-Object cmdlet-ին՝ ըստ Status հատկության տեսակավորման: Թե որ արգումենտին է փոխանցվում խողովակաշարի նախորդ հատվածի արդյունքը, կախված է դրա տեսակից. սովորաբար դա InputObject է: Այս հարցը ավելի մանրամասն կքննարկվի PowerShell ծրագրավորման լեզվին նվիրված հոդվածում։
Ցանկության դեպքում կարող եք շարունակել շղթան և Sort-Object-ի արդյունքը փոխանցել մեկ այլ cmdlet-ի (դրանք կկատարվեն ձախից աջ): Ի դեպ, Windows-ի օգտատերերը նաև մուտք ունեն բոլոր Unixoid-ներին ծանոթ դիզայնը՝ էջ առ էջ ելքի համար.
Get-Service | Sort-Object -property Status | more
Առաջադրանքների կատարումը հետին պլանում
Շատ հաճախ անհրաժեշտ է ետին պլանում որոշակի հրաման գործարկել, որպեսզի չսպասեք դրա կատարման արդյունքին shell-ի նիստում: Windows PowerShell-ն ունի մի քանի cmdlet այս իրավիճակի համար.
Start-Job
- գործարկել ֆոնային առաջադրանք;
Stop-Job
— ֆոնային առաջադրանքի դադարեցում;
Get-Job
— դիտելով ֆոնային առաջադրանքների ցանկը.
Receive-Job
— դիտել ֆոնային առաջադրանքի արդյունքը.
Remove-Job
— ֆոնային առաջադրանքի ջնջում;
Wait-Job
— ֆոնային առաջադրանքը ետ տեղափոխելով վահանակ:
Ֆոնային առաջադրանք սկսելու համար մենք օգտագործում ենք Start-Job cmdlet-ը և գանգուր փակագծերում նշում ենք հրաման կամ հրամանների մի շարք.
Start-Job {Get-Service}
Windows PowerShell-ում ֆոնային առաջադրանքները կարող են շահարկվել՝ իմանալով դրանց անունները: Նախ, եկեք սովորենք, թե ինչպես ցուցադրել դրանք.
Get-Job
Հիմա եկեք ցույց տանք Job1-ի արդյունքը.
Receive-Job Job1 | more
Դա բավականին պարզ է.
Հրամանի հեռավոր կատարում
Windows PowerShell-ը թույլ է տալիս հրամաններ և սկրիպտներ գործարկել ոչ միայն տեղական, այլ նաև հեռավոր համակարգչի և նույնիսկ մեքենաների մի ամբողջ խմբի վրա: Դա անելու մի քանի եղանակ կա.
- Շատ cmdlet-ներ ունեն պարամետր
-ComputerName
, բայց այս կերպ հնարավոր չի լինի, օրինակ, կոնվեյեր ստեղծել; - Cmdlet
Enter-PSSession
թույլ է տալիս ստեղծել ինտերակտիվ նիստ հեռավոր մեքենայի վրա. - Օգտագործելով cmdlet
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-ում հայտնվել են մեծ թվով նոր cmdlet-ներ: Դուք կարող եք պարզել ձեր համակարգչում տեղադրված հրամանի վահանակի տարբերակը՝ օգտագործելով $PSVersionTable ներկառուցված փոփոխականի PSVersion հատկությունը.
$PSVersionTable.PSVersion
Կարող եք նաև օգտագործել cmdlet-ը.
Get-Variable -Name PSVersionTable –ValueOnly
Նույնը կարելի է անել Get-Host cmdlet-ի միջոցով: Իրականում կան բազմաթիվ տարբերակներ, բայց դրանք օգտագործելու համար դուք պետք է սովորեք PowerShell ծրագրավորման լեզուն, ինչը մենք կանենք
Արդյունքները
Microsoft-ին հաջողվել է ստեղծել իսկապես հզոր հրամանի վահանակ՝ հարմար ինտեգրված միջավայրով սցենարներ մշակելու համար: Այն, ինչ այն տարբերում է Unix աշխարհում մեզ ծանոթ գործիքներից, նրա խորը ինտեգրումն է Windows ընտանիքի օպերացիոն համակարգերի, ինչպես նաև դրանց և .NET Core հարթակի համար նախատեսված ծրագրերի հետ: PowerShell-ը կարելի է անվանել օբյեկտի վրա հիմնված կեղև, քանի որ cmdlet-ները և օգտագործողի կողմից սահմանված գործառույթները վերադարձնում են օբյեկտներ կամ առարկաների զանգվածներ և կարող են դրանք ստանալ որպես մուտքագրում: Մենք կարծում ենք, որ բոլոր Windows սերվերի ադմինիստրատորները պետք է ունենան այս գործիքը. անցել է ժամանակը, երբ նրանք կարող էին անել առանց հրամանի տողի: Հատկապես անհրաժեշտ է առաջադեմ վահանակի պատյան
Հարցմանը կարող են մասնակցել միայն գրանցված օգտվողները։
Ո՞ր թեմաներին պետք է առաջին հերթին անդրադառնալ շարքի հաջորդ հոդվածներում:
-
53,2%Ծրագրավորում PowerShell123-ում
-
42,4%PowerShell98 գործառույթներ և մոդուլներ
-
22,1%Ինչպե՞ս ստորագրել սեփական սցենարները:51
-
12,1%Աշխատեք պահեստների հետ պրովայդերների միջոցով28
-
57,6%Ավտոմատացրեք համակարգչային կառավարումը PowerShell133-ի միջոցով
-
30,7%Ծրագրային ապահովման կառավարում և PowerShell-ի գործարկվող նյութերի ներդրումը երրորդ կողմի արտադրանքներում71
Քվեարկել է 231 օգտատեր։ 37 օգտատեր ձեռնպահ է մնացել։
Source: www.habr.com