Tarixən, Unix sistemlərindəki əmr sətri yardımçı proqramları əvvəlkindən daha inkişaf etmişdi WindowsLakin yeni bir həllin ortaya çıxması ilə vəziyyət dəyişdi.
Windows PowerShell sistem administratorlarına əksər gündəlik tapşırıqları avtomatlaşdırmağa imkan verir. Bu, parametrləri dəyişdirmək, xidmətləri dayandırmaq və işə salmaq, eləcə də quraşdırılmış tətbiqlərin əksəriyyətini saxlamaq üçün istifadə edilə bilər. Mavi pəncərəni sadəcə başqa bir əmr tərcüməçisi kimi qəbul etmək yanlış olardı. Bu yanaşma Microsoft-un innovasiyalarının mahiyyətini əks etdirmir. Əslində, imkanlar Windows PowerShell daha genişdir: bu qısa məqalələr seriyasında Microsoft-un həllinin daha çox tanış olduğumuz alətlərdən nə ilə fərqləndiyini anlamağa çalışacağıq.
Əsas xüsusiyyətlər
Əlbətdə Windows PowerShell əsasən skript dilinə malik əmr qabığıdır və əvvəlcə .NET Framework, daha sonra isə .NET Core üzərində qurulmuşdur. Mətn məlumatlarını qəbul edən və qaytaran qabıqlardan fərqli olaraq, Windows PowerShell, xüsusiyyətləri və metodları olan .NET sinifləri ilə işləyir. PowerShell, adi əmrləri yerinə yetirməyə imkan verir və həmçinin COM, WMI və ADSI obyektlərinə giriş təmin edir. Fayl sistemi və reyestr kimi müxtəlif saxlama resurslarından istifadə edir. Windows, sözdə provayderlər vasitəsilə əldə edilənlər. Qrafik interfeys vasitəsilə də daxil olmaqla, müxtəlif əməliyyatları yerinə yetirmək üçün PowerShell-in icra edilə bilən komponentlərini digər tətbiqlərə yerləşdirmək imkanını qeyd etmək lazımdır. Bunun əksi də doğrudur: bir çox tətbiq üçün Windows PowerShell vasitəsilə idarəetmə interfeyslərinə giriş təmin edin.
Windows PowerShell sizə imkan verir:
- Əməliyyat sistemi parametrlərini dəyişdirin;
- Xidmətləri və prosesləri idarə etmək;
- Server rollarını və komponentlərini konfiqurasiya etmək;
- Proqram təminatı quraşdırmaq;
- Quraşdırılmış proqram təminatını xüsusi interfeyslər vasitəsilə idarə etmək;
- Üçüncü tərəf proqramlarına icra edilə bilən komponentləri yerləşdirmək;
- İdarəetmə tapşırıqlarını avtomatlaşdırmaq üçün skriptlər yaradın;
- Fayl sistemi, reyestr ilə işləmək Windows, sertifikat saxlama və s.
Shell və inkişaf mühiti
Orada Windows PowerShell iki formada mövcuddur: konsol emulyatoru və əmr qabığına əlavə olaraq, İnteqrasiya olunmuş Skript Mühiti (ISE) də mövcuddur. Əmr sətri interfeysinə daxil olmaq üçün sadəcə menyudan müvafiq qısayolu seçin. Windows Və ya Run menyusundan powershell.exe faylını işə salın. Qədim cmd.exe faylından imkanları baxımından nəzərəçarpacaq dərəcədə fərqli olan mavi bir pəncərə görünəcək. Bu pəncərədə avtomatik tamamlama və Unix əmr qabıqlarının istifadəçilərinə tanış olan digər xüsusiyyətlər mövcuddur.

Qabıqla işləmək üçün bəzi klaviatura qısa yollarını yadda saxlamalısınız:
- Yuxarı və aşağı oxlar əvvəllər yazılmış əmrləri təkrarlamaq üçün tarixçəni sürüşdürür;
- Sətirin sonundakı sağ ox əvvəlki əmr simvolunu simvola görə yenidən yazır;
- Ctrl+Home yazılmış mətni kursor mövqeyindən sətrin əvvəlinə qədər silir;
- Ctrl+End kursordan sətrin sonuna qədər mətni silir.
F7 daxil edilmiş əmrlərin olduğu pəncərəni göstərir və onlardan birini seçməyə imkan verir. Konsol həmçinin siçan ilə mətn seçimi, kopyala-yapışdırmaq, kursorun yerləşdirilməsi, silmə, geriyə - bizim bəyəndiyimiz hər şeylə işləyir.

Windows PowerShell ISE, sintaksis vurğulaması olan sekmeli kod redaktoru, əmr dizayneri, daxili sazlayıcı və digər proqramlaşdırma üstünlükləri ilə tam hüquqlu bir inkişaf mühitidir. IDE redaktorunda əmr adından sonra defis yazsanız, bütün mövcud parametrlərin açılan siyahısını və onların növünü görəcəksiniz. PowerShell ISE-ni ya sistem menyusundakı qısa yol vasitəsilə, ya da powershell_ise.exe icraedici faylını işə salmaqla işə sala bilərsiniz.

Cmdletlər
В Windows PowerShell artıq sözdə cmdletlərə malikdir. Bunlar müxtəlif funksionallıqları tətbiq edən ixtisaslaşmış .NET sinifləridir. Onlar Action-Object (və ya istəsəniz, Feil-İsim) prinsipi ilə adlandırılır və defislə işarələnmiş cütləşmə təbii dil cümlələrindəki predikat və mübtədaya bənzəyir. Məsələn, Get-Help sözün əsl mənasında "Get-Help" və ya PowerShell kontekstində "Show-Help" deməkdir. Əsasən, bu, Unix sistemlərindəki man əmrinin ekvivalentidir və PowerShell-dəki təlimatlara --help və ya /? açarı ilə cmdletləri çağırmaq əvəzinə, bu şəkildə daxil olmaq lazımdır. PowerShell-in onlayn sənədlərini unutmayın: Microsoft-un kifayət qədər ətraflı sənədi var.
Get-ə əlavə olaraq, cmdletlər hərəkətləri ifadə etmək üçün digər fellərdən istifadə edirlər (və yalnız fellərdən deyil, ciddi şəkildə desək). Aşağıdakı siyahıda bəzi nümunələr veririk:
Add - əlavə etmək;
Clear - aydın;
Enable - işə sal;
Disable - söndürmək;
New - yaratmaq;
Remove - silmək;
Set - soruşmaq;
Start - qaçmaq;
Stop - dayanmaq;
Export - ixrac;
Import - idxal.
Sistem, istifadəçi və isteğe bağlı cmdletlər var: icra nəticəsində onların hamısı obyekti və ya obyektlər massivini qaytarır. Onlar hərflərə həssas deyillər, yəni. komanda tərcüməçisinin nöqteyi-nəzərindən Get-Help və get-help arasında heç bir fərq yoxdur. ';' simvolu ayırmaq üçün istifadə olunur, lakin onu yalnız bir sətirdə bir neçə cmdlet yerinə yetirdikdə qoymaq məcburidir.
Cmdletlər Windows PowerShell modullara (NetTCPIP, Hyper-V və s.) qruplaşdırılıb və Get-Command cmdlet obyektləri və hərəkətləri axtarmaq üçün istifadə olunur. Bunun üçün köməyi bu şəkildə göstərə bilərsiniz:
Get-Help Get-Command 
Varsayılan olaraq, əmr qısa yardım göstərir, lakin lazım olduqda parametrlər (arqumentlər) cmdletlərə ötürülür. Onların köməyi ilə siz, məsələn, ətraflı (parametr - Ətraflı) və ya tam (parametr -Tam) yardım əldə edə, həmçinin nümunələri göstərə bilərsiniz (parametr -Nümunələr):
Get-Help Get-Command -ExamplesKömək edin Windows PowerShell, Update-Help cmdlet istifadə edərək yenilənir. Əgər əmr sətri çox uzun olarsa, cmdlet arqumentləri "`" simvolunu yazmaq və Enter düyməsini basmaqla növbəti sətrə keçirilə bilər — sadəcə bir sətirdə əmri yazmağı bitirib digərində davam edə bilməzsiniz.
Budur ümumi cmdletlərin bəzi nümunələri:
Get-Process - sistemdə işləyən prosesləri göstərmək;
Get-Service — xidmətləri və onların statusunu göstərmək;
Get-Content — faylın məzmununu göstərin.
Tez-tez istifadə olunan cmdletlər və xarici yardım proqramları üçün Windows PowerShell-də ləqəb adlanan qısa sinonimlər var. Məsələn, dir, Get-ChildItem üçün ləqəbdir. Sinonimlərin siyahısına Unix-ə bənzər əmrlər (ls, ps və s.) də daxildir və Get-Help cmdleti help əmri ilə çağırılır. Sinonimlərin tam siyahısına Get-Alias cmdletindən istifadə etməklə baxmaq olar:

PowerShell Skriptləri, Funksiyaları, Modulları və Dili
Scripts Windows PowerShell skriptləri .ps1 uzantısı ilə düz mətn faylları kimi saxlanılır. Onları iki dəfə klikləyərək işə salmaq mümkün deyil; kontekst menyusunu açmaq üçün sağ düyməni basmalı və "PowerShell ilə işlət" seçimini etməlisiniz. Konsoldan ya skriptin tam yolunu göstərməli, ya da müvafiq qovluğa keçib fayl adını yazmalısınız. Skriptlərin işə salınması da sistem siyasəti ilə məhdudlaşdırılıb. Mövcud parametrləri yoxlamaq üçün aşağıdakı dəyərlərdən birini qaytaracaq Get-ExecutionPolicy cmdletindən istifadə edə bilərsiniz:
Restricted — skriptlərin işə salınması qeyri-aktivdir (standart olaraq);
AllSigned - yalnız etibarlı tərtibatçı tərəfindən imzalanmış skriptlərin işə salınmasına icazə verilir;
RemoteSigned - İmzalanmış və öz skriptlərini işlətməyə icazə verilir;
Unrestricted - istənilən skripti işlətməyə icazə verilir.
İdarəçinin iki seçimi var. Ən təhlükəsiz skriptlərin imzalanmasını nəzərdə tutur, lakin bu, olduqca ciddi bir sehrdir - gələcək məqalələrdə bununla məşğul olacağıq. İndi gəlin ən az müqavimət yolunu tutaq və siyasəti dəyişdirək:
Set-ExecutionPolicy RemoteSigned 
Bunu etmək üçün PowerShell-i administrator kimi işə salmaq lazımdır, baxmayaraq ki, cari istifadəçi üçün siyasəti xüsusi parametrlə dəyişə bilərsiniz.
Skriptlər obyekt yönümlü proqramlaşdırma dilində yazılır və əmrləri əvvəllər müzakirə edilən cmdletlərlə eyni prinsipə uyğun olaraq adlandırılır: "Action-Object" ("Verb-Noun"). Əsas məqsədi inzibati tapşırıqları avtomatlaşdırmaqdır, lakin bütün zəruri konstruksiyaları: şərti budaqları, döngələri, dəyişənləri, massivləri, obyektləri, səhvlərin işlənməsini və s. özündə birləşdirən tam hüquqlu şərh olunan bir dildir. Skriptlər yazmaq üçün istənilən mətn redaktoru uyğundur, lakin onu işə salmaq ən rahatdır. Windows PowerShell ISE.
Parametrləri skriptə ötürə, onları məcburi edə və həmçinin standart dəyərləri təyin edə bilərsiniz. Bundan əlavə, Windows PowerShell, Function konstruksiyasından və əyri mötərizələrdən istifadə edərək, cmdletlər kimi funksiyalar yaratmağa və onları çağırmağa imkan verir. Funksiyaları ehtiva edən skript modul adlanır və .psm1 uzantısına malikdir. Modullar PowerShell mühit dəyişənlərində müəyyən edilmiş qovluqlarda saxlanılmalıdır. Onları aşağıdakı əmrdən istifadə edərək görə bilərsiniz:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSizeKonveyerlər
Sonuncu nümunədə, Unix qabıqlarının istifadəçilərinə tanış olan bir konstruksiyadan istifadə etdik. Windows PowerShell-in şaquli zolağı həmçinin bir əmrin çıxışını digərinin girişinə ötürməyə imkan verir, lakin boru kəmərinin tətbiqində əhəmiyyətli bir fərq var: artıq simvol və ya mətn sətri deyil. Daxili cmdletlər və istifadəçi tərəfindən təyin edilmiş funksiyalar obyektləri və ya obyekt massivlərini qaytarır və onları giriş kimi də qəbul edə bilər. Bourne qabığı və onun bir çox varisləri kimi, PowerShell də mürəkkəb tapşırıqları sadələşdirmək üçün boru kəmərindən istifadə edir.
Ən sadə boru kəməri nümunəsi belə görünür:
Get-Service | Sort-Object -property Status 
Əvvəlcə Get-Service cmdleti yerinə yetirilir, sonra onun qəbul etdiyi bütün xidmətlər Status xassəsinə görə çeşidləmək üçün Sort-Object cmdletinə ötürülür. Boru kəmərinin əvvəlki hissəsinin nəticəsinin hansı arqumentə ötürülməsi onun növündən asılıdır - adətən bu, InputObject-dir. Bu məsələ PowerShell proqramlaşdırma dilinə həsr olunmuş məqalədə daha ətraflı müzakirə olunacaq.
İstəyə görə, zəncir uzadıla bilər və Sort-Object nəticəsi başqa bir cmdletə ötürülə bilər (onlar soldan sağa icra ediləcək). Yeri gəlmişkən, istifadəçilər Windows Bütün Unix istifadəçilərinə tanış olan səhifələmə quruluşu da mövcuddur:
Get-Service | Sort-Object -property Status | moreArxa planda icra olunan tapşırıqlar
Çox vaxt shell sessiyasında onun icrasının nəticəsini gözləməmək üçün müəyyən bir əmri arxa planda işlətmək lazımdır. Windows PowerShell-də bu hal üçün bir neçə cmdlet var:
Start-Job - fon tapşırığını işə salmaq;
Stop-Job — fon tapşırığını dayandırın;
Get-Job — fon tapşırıqlarının siyahısına baxmaq;
Receive-Job — fon tapşırığının icrasının nəticəsini görmək;
Remove-Job — fon tapşırığını silmək;
Wait-Job - fon tapşırığını konsola geri köçürmək.
Fon tapşırığına başlamaq üçün biz Start-Job cmdletindən istifadə edirik və əyri mötərizələrdə əmr və ya əmrlər dəstini təyin edirik:
Start-Job {Get-Service} 
Arxa plan tapşırıqları Windows PowerShell-i adlarını bilməklə manipulyasiya etmək olar. Gəlin onları necə göstərməyi öyrənək:
Get-Job 
İndi İş 1-in nəticəsini göstərək:
Receive-Job Job1 | more 
Hər şey olduqca sadədir.
Uzaqdan əmr icrası
Windows PowerShell əmrləri və skriptləri yalnız yerli kompüterdə deyil, həm də uzaq kompüterlərdə və hətta bütün maşın qruplarında işlətməyə imkan verir. Bunu etməyin bir neçə yolu var:
- Bir çox cmdletin parametri var
-ComputerName, lakin bu şəkildə işləməyəcək, məsələn, konveyer yaratmaq; - Cmdlet
Enter-PSSessionuzaq maşında interaktiv seans yaratmağa imkan verir; - Cmdlet istifadə edərək
Invoke-Commandəmrləri və ya skriptləri bir və ya bir neçə uzaq kompüterdə işlədə bilərsiniz.
PowerShell versiyaları
PowerShell, 2006-cı ildə ilk dəfə buraxıldığı gündən bəri əhəmiyyətli dərəcədə inkişaf etmişdir. Müxtəlif aparat platformalarında (x86, x86-64, Itanium, ARM) işləyən geniş sistemlər üçün mövcuddur: Windows xp, Windows Server 2003, Windows Baxış, Windows Server 2008/2008R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012R2, Windows 10, Windows Server 2016, GNU/Linux və OS X. Ən son versiya olan 6.2, 10 yanvar 2018-ci ildə buraxıldı. Əvvəlki versiyalar üçün yazılmış skriptlərin sonrakı versiyalarda işləməsi ehtimalı var, lakin PowerShell illər ərzində çox sayda yeni cmdlet əlavə etdiyindən, arxa plana yükləmə problemli ola bilər. Daxili $PSVersionTable dəyişəninin PSVersion xüsusiyyətindən istifadə edərək kompüterinizdə quraşdırılmış əmr qabığının versiyasını öyrənə bilərsiniz:
$PSVersionTable.PSVersion 
Siz həmçinin cmdletdən istifadə edə bilərsiniz:
Get-Variable -Name PSVersionTable –ValueOnly 
Eyni şey Get-Host cmdleti ilə edilir. Əslində, bir çox variant var, lakin onlardan istifadə etmək üçün PowerShell proqramlaşdırma dilini öyrənməlisiniz. .
Nəticələri
Microsoft, skriptlərin hazırlanması üçün əlverişli inteqrasiya olunmuş mühitə malik həqiqətən güclü bir əmr qabığı yaratmışdır. Onu Unix dünyasında öyrəşdiyimiz alətlərdən fərqləndirən şey, ailənin əməliyyat sistemləri ilə dərin inteqrasiyasıdır. Windows, eləcə də onlar üçün proqram təminatı və .NET Core platforması. PowerShell obyekt yönümlü qabıq adlandırıla bilər, çünki cmdletlər və istifadəçi tərəfindən təyin edilmiş funksiyalar obyektləri və ya obyekt massivlərini qaytarır və onları giriş kimi qəbul edə bilir. Biz inanırıq ki, bu alət bütün server administratorları üçün vacib bir vasitədir. Windows: əmr sətri olmadan edə biləcəkləri vaxt keçib. Xüsusilə inkişaf etmiş bir konsol qabığı lazımdır , amma bu tamamilə fərqli bir hekayədir.
Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər. xahiş edirəm.
Serialın növbəti məqalələrində ilk olaraq hansı mövzulara toxunulmalıdır?
53,2%PowerShell123-də proqramlaşdırma
42,4%PowerShell98 Funksiyaları və Modulları
22,1%Öz skriptlərinizi necə imzalamaq olar?51
12,1%Provayderlər (provayderlər) vasitəsilə depolarla işləmək28
57,6%PowerShell133 ilə Kompüter İdarəetməsinin avtomatlaşdırılması
30,7%Proqram təminatının idarə edilməsi və PowerShell icraedicilərinin üçüncü tərəf məhsullarına daxil edilməsi71
231 istifadəçi səs verib. 37 istifadəçi bitərəf qalıb.
Mənbə: www.habr.com
