Derketina nivîsê ya fermanan di pencereya wergêrê PowerShell de tenê rêyek e ku agahdariya bi rengek guncan ji têgihîştina mirovan re nîşan bide. Bi rastî roja Çarşemê
Tabloya naverokê:
Tiştên di PowerShell de
Werin em bînin bîra xwe ku obje berhevokek ji zeviyên daneyê (taybetî, bûyer, hwd.) û rêbazên ji bo hilanîna wan (rêbaz) e. Struktura wê ji hêla celebek ve tête diyar kirin, ku bi gelemperî li ser çînên ku di platforma yekbûyî .NET Core de têne bikar anîn ve girêdayî ye. Her weha gengaz e ku meriv bi tiştên COM, CIM (WMI) û ADSI re bixebite. Ji bo pêkanîna çalakiyên cihêreng ên li ser daneyan, taybetmendî û rêbaz hewce ne; ji bilî vê, di PowerShell de, tişt dikarin wekî arguman ji fonksiyon û cmdlets re werin derbas kirin, nirxên xwe ji guhêrbaran re werin veqetandin, û her weha heye.
Dîtina avahiya tiştan
Mînakî, em werin cmdlet-a Get-Process bimeşînin, ku dihêle hûn di derheqê pêvajoyên ku di pergalê de têne meşandin de agahdarî bistînin:
Ew ê hin daneyên nivîsê yên formatkirî nîşan bide ku di derheqê taybetmendiyên tiştên vegerî û rêbazên wan de ti ramanek nade. Ji bo başkirina encam, divê em fêr bibin ka meriv çawa avahiya tiştan lêkolîn dike, û cmdlet Get-Member dê di vê yekê de ji me re bibe alîkar:
Get-Process | Get-Member
Li vir em berê celeb û avahî dibînin, û bi alîkariya pîvanên din em dikarin, mînakî, tenê taybetmendiyên tiştê ku di têketinê de tê de hene nîşan bidin:
Get-Process | Get-Member -MemberType Property
Ev zanyarî dê ji bo çareserkirina pirsgirêkên rêveberiyê bi înteraktîf an nivîsandina nivîsarên xwe hewce bike: Mînakî, ji bo bidestxistina agahdariya li ser pêvajoyên darvekirî bi karanîna taybetmendiya Bersiv.
Parzûnkirina tiştan
PowerShell dihêle ku tiştên ku şertek diyarkirî pêk tînin di boriyekê re derbas bibin:
Where-Object { блок сценария }
Encama pêkanîna bloka skrîptê ya di nav parantezê de divê nirxek boolean be. Ger rast be ($true), tiştê ku têxe nav Cmdleta Where-Object dê li ser boriyê derbas bibe, wekî din ($ xelet) ew ê were jêbirin. Mînakî, em navnîşek karûbarên Windows Servera rawestayî nîşan bidin, yanî. yên ku taybetmendiya Rewşa wan wekî "Rawestiya" hatî danîn:
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Li vir dîsa em nûnertiyek nivîsê dibînin, lê heke hûn dixwazin celeb û avahiya hundurîn a tiştên ku di boriyê re derbas dibin fam bikin, ne dijwar e:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Cûrtkirina tiştan
Dema ku bi xeta boriyê ya tiştan têne hilberandin, pir caran hewcedarî bi veqetandina wan heye. Cmdlet Sort-Object navên taybetmendiyan (bişkojkên birêkûpêk) tê derbas kirin û tiştên ku li gorî nirxên wan hatine rêzkirin vedigerîne. Rêzkirina hilberîna pêvajoyên xebitandinê li gorî dema derbasbûyî ya CPU-yê (mulkê cpu) hêsan e:
Get-Process | Sort-Object –Property cpu
Dema ku tê gazîkirina Sort-Object cmdlet dibe ku pîvana -Property were jêbirin; ew ji hêla xwerû ve tê bikar anîn. Ji bo verastkirina berevajî, parametreya -Descending bikar bînin:
Get-Process | Sort-Object cpu -Descending
Hilbijartina tiştan û parçeyên wan
Hilbijêre-Object cmdlet dihêle hûn bi karanîna pîvanên -First an -Last-ê hejmarek taybetî li destpêk an dawiya boriyekê hilbijêrin. Bi alîkariya wê, hûn dikarin tiştên yekane an hin taybetmendiyan hilbijêrin, û li ser bingeha wan jî tiştên nû biafirînin. Ka em binihêrin ka cmdlet çawa bi karanîna mînakên hêsan dixebite.
Fermana jêrîn agahdariya li ser 10 pêvajoyên ku herî zêde mîqdara RAM-ê (taybetmendiya WS) dixwe nîşan dide:
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Hûn dikarin tenê hin taybetmendiyên tiştên ku di boriyê re derbas dibin hilbijêrin û li ser bingeha wan yên nû biafirînin:
Get-Process | Select-Object ProcessName, Id -First 1
Di encama xebata boriyê de, em ê hêmanek nû bistînin, ku strukturê wê ji avahiya ku ji hêla Get-Process cmdlet ve hatî vegerandin cûda dibe. Ka em vê bi karanîna Get-Member verast bikin:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Bala xwe bidinê ku Hilbijêre-Object yek tişt vedigerîne (-Yekemîn 1) ku tenê du ji qadên ku me diyar kirine hene: nirxên wan ji yekem tiştê ku ji hêla Get-Process cmdlet ve di nav boriyê de derbas bûye hatine kopî kirin. Yek ji awayên afirandina tiştan di nivîsarên PowerShell de li ser bingeha karanîna Hilbijartin-Object e:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Bi karanîna Hilbijartin-Object, hûn dikarin taybetmendiyên hesabkirî li tiştên ku hewce ne wekî bêne destnîşan kirin zêde bikin
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Ka em li avahiya tiştên ku di veguhezerê re derbas dibin binêrin:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
Ji boHer-Object, Kom-Object û Measure-Object
Ji bo xebata bi tiştan re cmdletên din hene. Wek nimûne, em li ser sê yên herî bikêr biaxivin:
ForEach-Object destûrê dide te ku hûn koda PowerShell-ê ji bo her tiştê di boriyê de bimeşînin:
ForEach-Object { блок сценария }
Kom-Object tiştan li gorî nirxa taybetmendiyê kom dike:
Group-Object PropertyName
Ger hûn wê bi parametreya -NoElement bimeşînin, hûn dikarin hejmara hêmanên di koman de fêr bibin.
Pîvan-Tişt Di boriyê de ji hêla nirxên zeviyê objeyê ve pîvanên kurteya cihêreng berhev dike (hevokê hesab dike, û her weha nirxa herî kêm, herî zêde an navînî jî dibîne):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Bi gelemperî, cmdletên ku têne nîqaş kirin bi înteraktîf têne bikar anîn, û bi gelemperî di nivîsan de têne afirandin.
Çêkirina tiştên .NET û COM (New-Object)
Gelek hêmanên nermalavê yên bi navgînên .NET Core û COM hene ku ji rêvebirên pergalê re bikêr in. Bi karanîna çîna System.Diagnostics.EventLog, hûn dikarin rasterast ji Windows PowerShell têketinên pergalê birêve bibin. Ka em li mînakek çêkirina mînakek vê polê bi karanîna cmdlet New-Object bi parametreya -TypeName binêrin:
New-Object -TypeName System.Diagnostics.EventLog
Ji ber ku me têketinek bûyerek taybetî diyar nekir, mînaka encam a polê ti daneyan dihewîne. Ji bo guheztina vê yekê, hûn hewce ne ku di dema afirandina wê de bi karanîna parametreya -ArgumentList bangî rêbazek çêkerek taybetî bikin. Ger em bixwazin xwe bigihînin têketina serîlêdanê, divê em rêzika "Serlêdan" wekî arguman ji çêker re derbas bikin:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Ji kerema xwe bala xwe bidin ku me hilberîna fermanê di guhêrbara $AppLog de tomar kir. Her çend boriyên bi gelemperî di moda înteraktîf de têne bikar anîn, nivîsandina nivîsan bi gelemperî hewce dike ku referansek li ser tiştekê were domandin. Wekî din, çînên bingehîn .NET Core di nav qada navên pergalê de hene: PowerShell ji hêla xwerû ve li celebên diyarkirî digere, ji ber vê yekê nivîsandina Diagnostics.EventLog li şûna System.Diagnostics.EventLog pir rast e.
Ji bo ku hûn bi têketinê re bixebitin, hûn dikarin rêbazên guncan bikar bînin:
$AppLog | Get-Member -MemberType Method
Ger mafên gihîştinê hebin, em bibêjin ku ew bi rêbaza Clear() tê paqij kirin:
$AppLog.Clear()
New-Object cmdlet jî ji bo xebatê bi pêkhateyên COM re tê bikar anîn. Gelek ji wan hene - ji pirtûkxaneyên ku bi servera skrîptê ya Windows-ê re têne peyda kirin heya serîlêdanên ActiveX, wekî Internet Explorer. Ji bo afirandina objeyek COM, hûn hewce ne ku parametreya -ComObject bi ProgId-a bername ya çîna xwestî re saz bikin:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Ji bo afirandina tiştên xwe yên bi avahiyek kêfî, karanîna New-Object pir arkaîk û giran xuya dike; ev cmdlet tê bikar anîn ku bi hêmanên nermalavê yên derveyî PowerShell re bixebite. Di gotarên paşerojê de dê ev mijar bi berfirehî were nîqaş kirin. Ji bilî tiştên .NET û COM, em ê tiştên CIM (WMI) û ADSI jî bikolin.
Banga Rêbazên Statîk
Hin dersên .NET Core nayên destnîşan kirin, di nav de System.Environment û System.Math. Ew hene
[System.Environment] | Get-Member
Ji bo dîtina tenê endamên statîk, bi parametreya -Static bangî Get-Endamê bikin (tişê objektê bala xwe bidinê):
[System.Environment] | Get-Member -Static
Ji bo gihîştina taybetmendî û rêbazên statîk, li şûna demajoyek piştî biwêjê, du stûnên li pey hev bikar bînin:
[System.Environment]::OSVersion
An
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
PSCustomObject binivîsin
Di nav gelek celebên daneyê yên di PowerShell de hene, hêjayî gotinê ye PSCustomObject, ku ji bo hilanîna tiştên bi avahiyek kêfî hatî çêkirin. Afirandina objeyek wusa bi karanîna cmdleta New-Object wekî rêgezek klasîk, lê giran û kevnar tê hesibandin:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Ka em li avahiya objektê binêrin:
$object | Get-Member
Bi PowerShell 3.0 dest pê dike, hevoksaziyek din heye:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Hûn dikarin bi yek ji awayên wekhev xwe bigihînin daneyan:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Li vir mînakek veguhertina hashtableyek heyî ji bo tiştek heye:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Yek ji dezawantajên tiştên bi vî rengî ew e ku rêza taybetmendiyên wan dikare biguhezîne. Ji bo ku hûn ji vê yekê dûr nekevin, divê hûn taybetmendiya [ordered] bikar bînin:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Vebijarkên din hene ji bo afirandina objeyekê: li jor me li bikaranîna cmdlet nihêrî
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
Add-Member cmdlet destûrê dide te ku hûn ne tenê taybetmendiyan, lê di heman demê de rêbazan jî li $objektek berê hatî afirandin bi karanîna avakirina "-MemberType ScriptMethod" zêde bikin:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Ji kerema xwe bala xwe bidinê ku me guhêrbara $ScriptBlock ya cureyê ScriptBlock bikar anî da ku koda rêbaza nû hilîne.
Ji bo rakirina taybetmendiyan, rêbaza têkildar bikar bînin:
$object.psobject.properties.remove('Name')
Çînên Xwe Diafirînin
PowerShell 5.0 şiyana pênasekirinê destnîşan kir
class MyClass
{
# тело класса
}
Ev celebek .NET Core ya rastîn e, bi laşek ku taybetmendiyên wê, rêbaz û hêmanên din vedibêje. Ka em li mînakek danasîna çîna herî hêsan binêrin:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Ji bo afirandina hêmanek (nimûneya polê), cmdlet bikar bînin
$object = New-Object -TypeName MyClass
an
$object = [MyClass]::new()
Ka em strukturên objeyê analîz bikin:
$object | Get-Member
Berberiyê ji bîr nekin: hûn nekarin navek tîpê wekî rêzek binav bikin an jî tîpek li derveyî nivîsar an modulê ku çîn tê de hatî destnîşan kirin bikar bînin. Di vê rewşê de, fonksiyon dikarin mînakên pola (tiştên) ku dê li derveyî modul an skrîptê bigihîjin vegerînin.
Piştî afirandina objektê, taybetmendiyên wê dagirin:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Bala xwe bidinê ku danasîna polê ne tenê celebên taybetmendiyê, lê di heman demê de nirxên xwerû yên wan jî diyar dike:
class Example
{
[string]$Name = 'John Doe'
}
Danasîna rêbazek polê dişibihe ravekirina fonksiyonek, lê bêyî karanîna peyva fonksiyonê. Wekî ku di fonksiyonê de, ger hewce be, parametre ji rêbazan re têne şandin:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Naha nûnerê pola me dikare bişirî:
$object = [MyClass]::new()
$object.Smile($true)
Rêbaz dikarin zêde werin barkirin; Wekî din, çînek heye
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Danasîna me ya xebata bi tiştên li PowerShell-ê re bi zorê ne bes e. Di weşanên jêrîn de, em ê hewl bidin ku wê bi mînakên pratîkî kûrtir bikin: gotara pêncemîn di rêzê de dê ji mijarên yekkirina PowerShell bi hêmanên nermalava sêyemîn re were veqetandin. Parçeyên berê dikarin li ser lînkên jêrîn werin dîtin.
Source: www.habr.com