Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Soosaarka qoraalka ee amarrada ku jira daaqadda turjubaanka PowerShell waa hab lagu soo bandhigo macluumaadka qaab ku habboon aragtida aadanaha. Dhab ahaantii Arbacada jihaysan in lagu shaqeeyo walxaha: cmdlets iyo hawluhu waxay u qaataan sidii gelinta iyo ku soo laabtay meesha laga baxo, iyo noocyada doorsoomayaasha la heli karo is dhexgal iyo qoraaladu waxay ku salaysan yihiin fasalada NET. Maqaalka afraad ee taxanaha, waxaan ku baran doonaa ku shaqeynta walxaha si faahfaahsan.

Shaxda tusmada:

Walxaha ku jira PowerShell
Daawashada qaab dhismeedka walxaha
Shaandhaynta walxaha
Kala soocida walxaha
Doorashada walxaha iyo qaybahooda
Shay-Wax kasta, Koox-Wax iyo Cabbir- Shay
Abuuritaanka .NET iyo walxaha COM (Wax Cusub)
Wacaysta Hababka Joogtada ah
Nooca PSUStomObject
Abuuritaanka fasallo adiga kuu gaar ah

Walxaha ku jira PowerShell

Aan dib u xasuusanno in shay uu yahay ururinta goobaha xogta (hantida, dhacdooyinka, iwm.) iyo hababka loo habeeyo (hababka). Qaab dhismeedkeeda waxaa lagu qeexay nooc, kaas oo inta badan ku saleysan fasalada loo isticmaalo midaysan .NET Core platform. Waxa kale oo suurtogal ah in lagu shaqeeyo COM, CIM (WMI) iyo walxaha ADSI. Guryaha iyo hababka ayaa loo baahan yahay si loo sameeyo ficillo kala duwan oo ku saabsan xogta; Intaa waxaa dheer, PowerShell, walxaha waxaa loo gudbin karaa dood ahaan hawlaha iyo cmdlets, oo loo qoondeeyay qiyamkooda doorsoomayaasha, iyo sidoo kale waxaa jira habka halabuurka amarka (qaade ama dhuumaha). Amar kasta oo dhuumaha ku jira wuxuu u gudbiyaa wax soo saarkiisa kan ku xiga, shayga shay. Si loo habeeyo, waxaad isticmaali kartaa cmdlets oo la soo ururiyey ama waxaad samayn kartaa adigu muuqaalada horumarsanin lagu sameeyo wax-is-daba-marin kala duwan oo leh walxaha dhuumaha ku jira: shaandhaynta, kala-soocidda, kooxaynta, iyo xitaa beddelidda qaab-dhismeedkooda. Gudbinta xogta foomkan waxay leedahay faa'iido halis ah: kooxda qaata uma baahna inay kala qaybiyaan qulqulka byte (qoraalka), dhammaan macluumaadka lagama maarmaanka ah si fudud ayaa loo soo ceshan karaa iyadoo la wacayo guryaha iyo hababka ku habboon.

Daawashada qaab dhismeedka walxaha

Tusaale ahaan, aan wadno Get-Process cmdlet, kaas oo kuu ogolaanaya inaad hesho macluumaadka ku saabsan hababka ku socda nidaamka:

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Waxay soo bandhigi doontaa qaar ka mid ah xogta qoraalka qaabaysan oo aan wax fikrad ah ka bixinayn sifooyinka walxaha la soo celiyay iyo hababka ay u shaqeeyaan. Si loo hagaajiyo wax soo saarka, waxaan u baahanahay inaan barano sida loo baaro qaabka walxaha, iyo Get-Member cmdlet ayaa naga caawin doonta tan:

Get-Process | Get-Member

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Halkan waxaan horayba u aragnaa nooca iyo qaab-dhismeedka, iyo iyadoo la kaashanayo cabbirro dheeraad ah waxaan awoodnaa, tusaale ahaan, soo bandhigida kaliya sifooyinka shayga ku jira gelinta:

Get-Process | Get-Member -MemberType Property

Aqoontan ayaa loo baahan doonaa si loo xalliyo mashaakilaadka maamulka si isdhexgal leh ama si aad u qorto qoraaladaada: tusaale ahaan, si aad u hesho macluumaadka ku saabsan hababka la sudhay adoo isticmaalaya hantida ka jawaabista.

Shaandhaynta walxaha

PowerShell waxay u ogolaataa shayada buuxiya shuruudo gaar ah in la maro dhuumaha:

Where-Object { блок сценария }

Natiijada fulinta qoraalka qoraalka ee ku dhex jira jaantusyada waa inay noqotaa qiime boolean ah. Haddii ay run tahay ($ run), shayga lagu geliyo Meesha-Waxyaabaha cmdlet waxa la marinayaa dhuumaha, haddii kale ($ been) waa la tirtiri doonaa. Tusaale ahaan, aan soo bandhigno liiska adeegyada Windows Server ee la joojiyay, i.e. kuwa Status hantidooda lagu dejiyay inay "Joojiso":

Get-Service | Where-Object {$_.Status -eq "Stopped"}

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Halkan mar kale waxaan ku aragnaa matalaad qoraal ah, laakiin haddii aad rabto inaad fahamto nooca iyo qaabka gudaha ee walxaha maraya dhuumaha ma aha mid adag:

Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Kala soocida walxaha

Marka tuubbooyinka farsamaynta walxaha, waxaa badanaa loo baahan yahay in la kala saaro. cmdlet-ka Kala-soocida waxa la gudbiyaa magacyada guryaha (furayaasha kala-soocidda) oo soo celisa walxaha lagu amray qiimahooda. Way fududahay in la kala saaro wax soo saarka hababka socodsiinta wakhtiga CPU la qaatay ( hantida cpu):

Get-Process | Sort-Object –Property cpu

Halbeegga -Property waa laga saari karaa marka la wacayo Sort-Object cmdlet; waxaa loo istcimaalayaa si caadi ah. Kala soocida gadaasha, isticmaal qiyaasta -Descending:

Get-Process | Sort-Object cpu -Descending

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Doorashada walxaha iyo qaybahooda

cmdlet-ka Select-Object wuxuu kuu ogolaanayaa inaad doorato tiro gaar ah oo shay ah bilowga ama dhamaadka dhuumaha adigoo isticmaalaya xuduudaha -First ama -Last. Caawinteeda, waxaad dooran kartaa shay keliya ama waxyaabo gaar ah, iyo sidoo kale waxaad abuuri kartaa walxo cusub oo iyaga ku salaysan. Aynu eegno sida uu cmdlet u shaqeeyo anagoo adeegsanayna tusaalooyin fudud.

Amarka soo socdaa wuxuu muujinayaa macluumaadka ku saabsan 10ka hab ee cunaya qadarka ugu badan ee RAM ( hantida WS):

Get-Process | Sort-Object WS -Descending | Select-Object -First 10

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Waxaad dooran kartaa oo kaliya sifooyinka gaarka ah ee walxaha maraya dhuumaha oo waxaad abuurtaa kuwo cusub iyaga oo ku saleysan:

Get-Process | Select-Object ProcessName, Id -First 1

Natiijadii hawlgalka dhuumaha, waxaanu heli doonaa shay cusub, kaas oo qaab-dhismeedkiisu ka duwanaan doono qaab-dhismeedka uu soo celiyay Get-Process cmdlet. Aan ku xaqiijino tan anagoo adeegsanayna Get-Member:

Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Ogsoonow in Select-Object uu soo celinayo hal shay (-First 1) kaas oo leh laba kaliya oo ka mid ah beeraha aan qeexnay: qiyamkooda waxaa laga soo guuriyay shaygii ugu horreeyay ee loo maro dhuumaha by Get-Process cmdlet. Mid ka mid ah siyaabaha loo abuuro walxaha ku jira qoraallada PowerShell waxay ku saleysan tahay adeegsiga Select-Wax:

$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Adigoo isticmaalaya Select-Object, waxaad ku dari kartaa guryaha la xisaabiyay walxaha u baahan in loo muujiyo sida miisaska xashiishka. Xaaladdan oo kale, qiimaha furihiisa koowaad wuxuu u dhigmaa magaca hantida, qiimaha furaha labaadna wuxuu u dhigmaa qiimaha hantida ee qaybta dhuumaha hadda:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Aynu eegno qaabka ay u dhisan yihiin walxaha dhex mara gaadiidka:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Shay-Wax kasta, Koox-Wax iyo Cabbir- Shay

Waxaa jira cmdlets kale oo loogu talagalay in lagu shaqeeyo walxaha. Tusaale ahaan, aan ka hadalno saddexda ugu faa'iidada badan:

Ujeeddo-kasta wuxuu kuu ogolaanayaa inaad ku socodsiiso koodka PowerShell shay kasta oo dhuumaha ku jira:

ForEach-Object { блок сценария }

Koox-Wax kooxuhu waxay wax ku iibsadaan qiimaha hantida:

Group-Object PropertyName

Haddii aad ku socodsiiso halbeegga -NoElement, waxaad ogaan kartaa tirada curiyeyaasha ee kooxaha.

Cabbir-Wax wuxuu isu geeyaa cabbirro kooban oo kala duwan iyadoo la eegayo qiyamka goobta shayga ee dhuumaha (wuxuu xisaabiyaa wadarta, iyo sidoo kale wuxuu helaa ugu yaraan, ugu badnaan ama celceliska qiimaha):

Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum

Caadi ahaan, cmdlets-ka laga hadlay waxaa loo istcimaalaa si dhexgal ah, waxaana badanaa lagu abuuraa qoraallo. hawlaha oo leh Begin, Process and End blocks.

Abuuritaanka .NET iyo walxaha COM (Wax Cusub)

Waxaa jira qaybo badan oo software ah oo leh NET Core iyo COM interfaces kuwaas oo waxtar u leh maamulayaasha nidaamka. Adigoo isticmaalaya fasalka System.Diagnostics.EventLog, waxaad si toos ah uga maamuli kartaa diiwaannada nidaamka Windows PowerShell. Aynu eegno tusaale abuurista tusaale fasalkan annagoo adeegsanayna cmdlet-Walaxda Cusub oo leh halbeegga -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Maadaama aynaan cayimin diiwaanka dhacdooyinka gaarka ah, tusaalaha soo baxay ee fasalka kuma jiraan xog. Si aad tan u bedesho, waxaad u baahan tahay inaad wacdo hab dhisme gaar ah inta lagu jiro abuuritaankiisa adoo isticmaalaya cabbirka -ArgumentList. Haddii aan rabno in aan galno log-ka arjiga, waa in aan u gudubno xardhigga "Codsiga" dood ahaan dhisaha:

$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Fadlan ogow inaan ku keydinay wax soo saarka amarka doorsoomaha $AppLog. Inkasta oo dhuumaha inta badan loo isticmaalo habka is-dhexgalka, qoraallada qorista waxay inta badan u baahan yihiin in la ilaaliyo tixraaca shay. Intaa waxaa dheer, fasallada NET Core xudunta u ah waxay ka kooban yihiin nidaamka magaca nidaamka: PowerShell asal ahaan waxay u eegtaa noocyo cayiman, markaa qorista Diagnostics.EventLog beddelka System.Diagnostics.EventLog waa sax.

Si aad ula shaqeyso log, waxaad isticmaali kartaa hababka ku habboon:

$AppLog | Get-Member -MemberType Method

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Aynu nidhaahno waxaa lagu nadiifiyay habka Clear () haddii ay jiraan xuquuqaha gelitaanka:

$AppLog.Clear()

cmdlet-ka-Cusub waxa kale oo loo istcimaalaa in lagula shaqeeyo qaybaha COM. Waxaa jira wax badan oo iyaga ka mid ah - laga bilaabo maktabadaha lagu soo bandhigay server-ka qoraalka Windows ilaa codsiyada ActiveX, sida Internet Explorer. Si aad u abuurto shayga COM, waxaad u baahan tahay inaad dejiso -ComObject parameter oo leh barnaamijka ProgId ee fasalka la rabo:

New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject

Si aad u abuurto walxo kuu gaar ah oo leh qaab-dhismeed aan caadi ahayn, adeegsiga New-Object waxay u muuqataa mid qadiimi ah oo dhib badan; cmdlet-kan waxa loo isticmaalaa in lagu shaqeeyo qaybaha softiweerka ee ka baxsan PowerShell. Maqaallada mustaqbalka arrintan ayaa si faahfaahsan looga doodi doonaa. Marka lagu daro .NET iyo walxaha COM, waxaanu sidoo kale sahamin doonaa CIM (WMI) iyo walxaha ADSI.

Wacaysta Hababka Joogtada ah

Qaar ka mid ah fasalada NET Core lama soo dajin karo, oo ay ku jiraan System.Environment and System.Math. Waxay kala yihiin taagan oo ka kooban guryaha iyo hababka kaliya ee taagan. Kuwani waa maktabado tixraac ah oo la isticmaalo iyada oo aan la abuurin walxo. Waxaad u tixraaci kartaa fasalka taagan iyadoo loo marayo qaab toosan adoo ku lifaaqaya nooca magaca birta labajibbaaran. Si kastaba ha ahaatee, haddii aan eegno qaabka shayga annagoo isticmaalaya Get-Member, waxaan arki doonaa nooca System.RuntimeType halkii System.Environment:

[System.Environment] | Get-Member

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Si aad u aragto xubnaha joogtada ah, wac Get-Member oo leh cabbirka -Static (u fiirso nooca shayga):

[System.Environment] | Get-Member -Static

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Si aad u hesho hanti ma guurto ah iyo habab, isticmaal laba xiidan oo isku xigta halkii aad ka isticmaali lahayd muddo ka dib macnaha dhabta ah:

[System.Environment]::OSVersion

Ama

$test=[System.Math]::Sqrt(25) 
$test
$test.GetType()

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Nooca PSUStomObject

Ka mid ah noocyada xogta ee tirada badan ee laga heli karo PowerShell, waxaa mudan in la xuso PSCustomObject, oo loogu talagalay in lagu kaydiyo walxo leh qaab dhismeed aan caadi ahayn. Abuuritaanka shaygan oo kale iyadoo la isticmaalayo cmdlet-Walaxda Cusub waxa loo tixgaliyaa hab caadi ah, laakiin dhib badan oo duugoobay:

$object = New-Object  –TypeName PSCustomObject -Property @{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'}

Aynu eegno qaabka shayga:

$object | Get-Member

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Laga bilaabo PowerShell 3.0, syntax kale ayaa diyaar ah:

$object = [PSCustomObject]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

Waxaad xogta ku heli kartaa mid ka mid ah siyaabaha u dhigma:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Waa kuwan tusaale u beddelashada hashtable jira shay:

$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Mid ka mid ah faa'iido darrada walxaha noocan oo kale ah ayaa ah in nidaamka hantidoodu isbeddeli karaan. Si taas looga fogaado, waa inaad isticmaashaa sifada [dalbashada]:

$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

Waxaa jira xulashooyin kale oo lagu abuurayo shay: kor waxaan eegnay annaga oo adeegsanayna cmdlet Xulo-Ujeedo. Waxa hadhay oo dhan waa in la ogaado isku-darka iyo saarista curiyeyaasha. Ku samaynta tan shayga laga soo qaatay tusaalihii hore waa wax fudud:

$object | Add-Member –MemberType NoteProperty –Name Age  –Value 33
$object | Get-Member

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

cmdlet-ku-darka-xubinta waxay kuu oggolaanaysaa inaad ku darto guryaha oo keliya, laakiin sidoo kale habab aad ku darto shay hore loo sameeyay $ shay adoo isticmaalaya "-MemberType ScriptMethod" dhiska:

$ScriptBlock = {
    # код 
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member

Fadlan la soco in aan isticmaalnay doorsoomaha $ScriptBlock ee nooca ScriptBlock si aan u kaydiyo koodka habka cusub.

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Si aad meesha uga saarto guryaha, isticmaal habka u dhigma:

$object.psobject.properties.remove('Name')

Abuuritaanka fasallo adiga kuu gaar ah

PowerShell 5.0 waxay soo bandhigtay awooda lagu qeexo fasalada iyadoo la adeegsanaayo sifada luuqadaha barnaamijka ku jihaysan shayga. Erayga adeegga Class waxaa loogu talagalay tan, ka dib markaa waa inaad qeexdaa magaca fasalka oo aad ku qeexdaa jirkeeda xirmooyinka hawlwadeenka:

class MyClass
{
    # тело класса
}

Kani waa nooca .NET Core oo run ah, oo leh jidh qeexaya sifooyinkiisa, hababka iyo walxaha kale. Aynu eegno tusaale qeexida fasalka ugu fudud:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
}

Si aad u abuurto shay (tusaale fasalka), isticmaal cmdlet Walax cusub, ama nooc dhab ah [MyClass] iyo habka pseudostatic cusub (dhise hore):

$object = New-Object -TypeName MyClass

ama

$object = [MyClass]::new()

Aynu falanqeyno qaabka shayga:

$object | Get-Member

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Ha iloobin baaxadda: magaca nooca xarriiq ahaan uma tixraaci kartid ama ma isticmaali kartid nooc ka baxsan qoraalka ama moduleka kaas oo fasalka lagu qeexay. Xaaladdan, hawluhu waxay soo celin karaan tusaalooyinka fasalka (walxaha) ee laga heli karo meel ka baxsan cutubka ama qoraalka.

Kadib abuurista shayga, buuxi sifooyinkiisa:

$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Ogsoonow in sharraxaadda fasalka aysan qeexayn oo keliya noocyada hantida, laakiin sidoo kale qiimahooda caadiga ah:

class Example
{
     [string]$Name = 'John Doe'
}

Sharaxaada habka fasalku waxay u egtahay sharraxaadda shaqada, laakiin iyada oo aan la isticmaalin ereyga shaqada. Sida shaqada, cabbirada waxaa loo gudbiyaa hababka haddii loo baahdo:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
     
     #описание метода
     Smile([bool]$param1)
     {
         If($param1) {
            Write-Host ':)'
         }
     }
}

Hadda wakiilka fasalkayagu wuu dhoola cadeyn karaa:

$object = [MyClass]::new()
$object.Smile($true)

Hababka waa la badin karaa, marka lagu daro, fasal ayaa leh guryaha taagan iyo hababka, iyo sidoo kale dhisayaasha magacyadoodu ku beegan yihiin magaca fasalka laftiisa. Fasalka lagu qeexay qoraalka ama moduleka PowerShell wuxuu u adeegi karaa saldhig mid kale - tani waa sida dhaxalka loo fuliyo. Xaaladdan oo kale, waa la oggol yahay in loo isticmaalo fasallada .NET ee jira sida kuwa aasaasiga ah:

class MyClass2 : MyClass
{
      #тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)

Sharaxaada ku saabsan la shaqaynta walxaha PowerShell waa mid aad u yar. Daabacaadaha soo socda, waxaan isku dayi doonaa inaan ku sii qotono tusaalooyin wax ku ool ah: maqaalka shanaad ee taxanaha ayaa loo go'aamin doonaa arrimaha isku dhafka PowerShell ee qaybaha software-ka saddexaad. Qaybihii hore waxaa laga heli karaa xiriirinta hoose.

Qaybta 1: Astaamaha Windows PowerShell ee aasaasiga ah
Qaybta 2: Horudhaca Luqadda Barnaamijaynta PowerShell ee Windows
Qaybta 3: u gudbinta cabbirada qoraallada iyo hawlaha, abuurista cmdlets

Waa maxay Windows PowerShell maxaase loo isticmaalaa? Qeybta 4: Ku shaqeynta walxaha, fasallo u gaar ah

Source: www.habr.com

Add a comment