PowerShell
Fundamental PowerShell istifadəsi
Last updated
Was this helpful?
Fundamental PowerShell istifadəsi
Last updated
Was this helpful?
Windows PowerShell, İT mütəxəssislərinin sistemləri konfiqurasiya etməsinə və adminstrativ tapşırıqları avtomatlaşdırmasına kömək etmək üçün hazırlanmış, interaktiv terminala sahib skript dilidir. Windows 2008 R2 ilə başlayan hər müasir Windows ƏS-də standart olaraq qurulub.
PowerShelldən həm terminal kimi əmrləri tək tək yazmaq həm də ISE (Integrated Scripting Environment) olaraq öz skriptlərimizi hazırlamaq üçün istifadə edə bilərik. Hər ikisini çalışdırmaq üçün sadəcə start menusunda adlarını axtara bilərsiniz.
PowerShell skriptləri .ps1
fayllarında saxlanılır. Skripti sadəcə üzərinə 2 dəfə klik etməklə çalışdıra bilməzsiniz, sisteminizə bilmədən zərər verməyinizin qarşısını almaq üçün bu cür dizayn edilib. Bir skripti çalışdırmaq üçün əvvəlcə sağ klik etmək və sonra açılan menudan “PowerShell ilə Çalıştır” (Run with PowerShell) düyməsini basmaq lazımdır.
Windowsda bir policy var ki, bu policy sistemdə .ps1
fayllarının icrasına icazə verilib verilməməsini müəyyənləşdirir. Bu policy ExecutionPolicy adlanır. Sistemimizdə hazırda icazə verilib verilməməsini bilmək üçün PowerShell terminal pəncərəsində aşağıdakı əmri çalışdırırıq:
Göründüyü kimi ExecutionPolicy hazırda Restricted dəyərini verir. "Restricted" sözü ingiliscədən tərcümədə "məhdudiyyət qoyulub" mənasını verir. ExecutionPolicy həmçinin aşağıdakı dəyərləri ala bilər:
Restricted - Heç bir skriptə icazə verilmir. Standart olaraq belə olur.
AllSigned - Yalnız güvənilən developerlər tərəfindən imzalanan skriptlərinin çalışdırılmasına icazə verilir.
RemoteSigned - Həm sizin skriptlərinizin, həm də güvənilən developerlər tərəfindən imzalanan skriptlərinin çalışdırılmasına icazə verilir.
Unrestricted - Bütün növ skriptlərə icazə verilir.
Sistemimizdə .ps1
skirptlərini çalışdıra bilmək üçün aşağıdakı əmri istifadə edirik və öz skriptlərimiz çalışsın deyə ExecutionPolicy dəyərini RemoteSigned edirik:
Əmr: Set-ExecutionPolicy RemoteSigned
Yuxardakı hissəni bir az sağa sürüşdürsəniz görəcəksiniz ki, bizdən bunu təsdiq etməyimizi istəyir, belə olan halda "Y" (yəni yes) yazıb enter sıxırıq.
Ola bilər ki sizə Permission Denied xətası versin, belə olan halda powershell terminaını Administrator adı ilə başladmaq lazımdır.
Fikir verdinizsə bir məlumatı görmək istədiyimiz əmr "Get" ilə başladı, onu dəyişdirmək üçün istifadə etdiyimiz əmr isə "Set"ilə başladı. İndi isə bu qanuna uyğunluq barədə öyrənək.
Linuxda olan ls, pwd, cd, mkdir, echo, cat, ps və s. burada da eyni məqsədlə çalışır.
Cmdlet əvvəlcədən təyin edilmiş funksiyaya malik olan bir PowerShell əmrinə deyilir. Programlaşdırma dillərində olan operatorlar kimi. Cmdletlər haqqında aşağıdakıları bilməlisiniz:
Cmdletlərin 3 növü var: System, User və Custom
Cmdletlər nəticələri terminala ya array ya da object olaraq qaytarır (Programlaşdırma dillərindən öyrəndiyimiz array və object).
Cmdletləri yazarkən hansı hərfi böyük hansını kiçik yazdığınızın əhəmiyyəti olmur. Yuxarıda olan əmri SeT-ExeCuTionPolicY formasında yazsaq da işləyəcək yenə.
Əgər ardıcıl olaraq bir neçə Cmdlet işlətmək istəyiriksə onları ;
işarəsi ilə ayıraraq ardıcıl yazmalıyıq.
Cmdletlər adətən bir feil və bir ismin birləşməsindən yaranır. Qısaca məntiqi "Filan şeyi et, filan obyektə et". Aşağıda bu feillərdən bəzilərini görə bilərsiniz:
• Get - Hansısa datanı əldə etmək üçün. Yuxarıda işlətdik. • Set - Hansısa parametrin dəyərini dəyişmək üçün. Yuxarıda işlətdik. • Start - Nəyisə çalışdırmaq üçün • Stop - Çalışan nəyisə dayandırmaq üçün. • Out - Hansısa datanı terminala output edilməsini təmin etmək. • New - Yeni bir şey yaratmaq üçün. (Bu feil deyil, lakin Cmdletlər belə də başlaya bilir.)
Test etmək üçün gəlin sistemimizdəki servisləri görək:
Yuxarıdakı cmdlet bizə servislərin adını, hazırki vəziyyətlərini və qısa izahlarını gətirdi. Aşağıdakı əmr isə sistemimizdə çalışan prosesləri Bizə göstərir:
Hansısa cmdletin necə istifadə edildiyini öyrənmək üçün Get-Help
cmdletini istifadə edə bilərsiniz. Məsələn Get-Process
cmdleti barədə yardım alaq:
20-ci sətirdə gördüyünüz ALIASES hissəsində həmin əmrin qısa adı görünür. Yəni biz Get-Process
cmdletini sadəcə ps və ya gps yazaraq icra edə bilərik.
Parametrlər icra olunacaq olan cmdlet-in nəyə əsasən icra olunacağını təmin edən dəyərlərdir. Məsələn biz axtarmaq əmri verdiyimiz zaman hansısa açar söz əlavə edirik ki həmin sözü axtarsın. Həmin bu açar söz indiki vəziyyətdə parametr olaraq çıxış edir. İcra olunan program və ya cmdlet öz işini həmin açar sözü tapmaq üçün həyata keçirir. Hər cmdletin özünə uyğun parametrləri var ki cmdletləri daha çox istifadəyə yararlı hala gətirir. Əgər hansısa əmri PowerShell ISE də yazsaq o avtomatik olaraq cmdletin özünə məxsus olan parametrləri təklif edəcək, digər kod editorlarında və ya İDE-lərdə olduğu kimi.
Parametr adları cmdletdən sonra əvvəlində tire(-) qoyulmaqla yazılır. Məsələn bizə Servislərdən yalnız Xbox
servislərini görmək lazımdır. Belə olan halda Get-Services
əmrini və onun -Name
parametrini istifadə edəcəyik. Aşağıdakı əmrdə olduğu kimi:
Ulduz işarəsi wildcard olaraq çıxış edir. Və adının əvvəlində Xbox ifadəsi olan bütün servisləri gətirir.
Yuxarıda qeyd etdiyimiz -Name
parametri sadəcə bir parametr idi. Onun kimi çox sayda işimizi asanlaşdıracaq parametrlər var. Hansısa bir cmdletin imkanlarından xəbərimiz yoxdursa və mövcud parametrlərini görmək istəyiriksə belə olan halda piping ( |
) istifadə edərək Get-Member
cmdletini istifadə edə bilərik. Get-Member
cmdleti özündən əvvəl yazılan cmdletin parametrlərini göstərir. Aşağıdakı kimi:
Gördüyümüz kimi Get-Service
cmdletinin bütün parametrlərini terminalda göstərdi. Bu parametrlərə əsasən Get-Service
cmdletinin bizə verəcəyi məlumatları istədiyimizə uyğun formalaşdıra bilirik.
İndi isə piping istifadə edərək əvvəlcə bütün servisləri görüb sonra onların arasından yalnız istifadə olunanları çıxaracağıq. Lakin bu datanı da tam yox, yalnız adlarını göstərəcəyik. Bunu etmək üçün 3 cmdlet-i bir birinə qoşmaq lazımdır:
• Get-Service
- bütün servisləri çəkmək üçün.
• WHERE {$_.status -eq "Running"}
- WHERE (burada: Harada ki...) ifadəsi bütün datanın arasında yalnız özündən sonrakı hissədə tətbiq edilən filterə uyğun gələn dataları seçir.Programlaşdırma təcrübəsi olanlar üçün qısaca: bir cmdletin return etdiyi data ikinciyə $_
adı ilə ötürülür.Daha uzun: $_
- hissəsi hazırki cmdletdən əvvəl gələn cmdlet tərəfindən ötürülmüş datanı bildirir. Yəni ilk cmdletimiz olan Get-Service
cmdletinin gətirdiyi bütün servislərin siyahısı ikinci cmdletə ötürərkən $_
olaraq adlandılır ki, lazım olarsa qısa bir adla bütün datanın üzərində əməliyyat aparmaq mümkün olsun. Beləliklə də $_.status -eq "Running"
hissəsi bütün data içərisində statusu Running ə bərabər olan (-eq
= equals = bərabərdir) servislərə məxsus bütün datanı gətirir.
• SELECT displayname
hissəsi bizim üçün əmrimizin 1 və 2 ci hissələrindən filterlənmiş bütün data içərisində yalnız displayname-ləri seçir. Yəni istifadəçilərə göstərilən adlarını. Bununla da daha səliqəli data əldə etmiş oluruq.
Aşağıdakı kimi:
İndi qoşmalarımızın sayını daha çox artıraq və aldığımız nəticəni fayla yazaq. Bunun üçün Out-File cmdleti işlənir və əmrimiz aşağıdakı kimi dəyişir:
Get-Service | WHERE {$_.status -eq "Running"} | SELECT displayname | Out-File C:\serv.txt
Aydın olduğu kimi yuxarıdakı 4-cü pipe olunan əmr ona göndərilmiş 1, 2 və 3cü əmrdən keçib gələn datanı C diskində serv.txt adı ilə yaddaşa yazacaq (Əgər icazəniz varsa, əks halda "Access Denied!").
Cmdletlər datanı həm terminalda göstərə həmçinin başqa bir Cmdlet-ə ötürə bilər( burada da var.)