Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ukukhishwa kombhalo wemiyalo efasiteleni lomhumushi we-PowerShell kuyindlela nje yokubonisa ulwazi ngendlela efanelekile ukubonwa komuntu. Empeleni ngoLwesithathu kuthambekele ukusebenza ngezinto: cmdlets kanye nemisebenzi izithola njengokufaka kanye wabuyela ekuphumeni, kanye nezinhlobo eziguquguqukayo ezitholakalayo ngokuhlanganyela nasemibhalweni zisekelwe kumakilasi e-.NET. Esihlokweni sesine sochungechunge, sizofunda ukusebenza ngezinto ngokuningiliziwe.

Incazelo:

Izinto ku-PowerShell
Ukubuka ukwakheka kwezinto
Ukuhlunga izinto
Ukuhlunga izinto
Ukukhetha izinto nezingxenye zazo
Kwento Ngayinye, Into Yeqembu kanye Nento Yokulinganisa
Ukudala izinto ze-NET kanye ne-COM (Into Entsha)
Ukushayela Izindlela Eziqinile
Thayipha i-PSCustomObject
Ukudala Amakilasi Akho

Izinto ku-PowerShell

Masikhumbule ukuthi into iqoqo lezinkambu zedatha (izakhiwo, imicimbi, njll.) nezindlela zokuzicubungula (izindlela). Isakhiwo sawo sicaciswa uhlobo, oluvame ukusekelwe kumakilasi asetshenziswa kuplathifomu ehlanganisiwe ye-NET Core. Kungenzeka futhi ukusebenza ngezinto ze-COM, CIM (WMI) kanye ne-ADSI. Izakhiwo nezindlela ziyadingeka ukwenza izenzo ezahlukahlukene kudatha; ngaphezu kwalokho, ku-PowerShell, izinto zingadluliswa njengezingxabano emisebenzini kanye nama-cmdlets, zabelwe amanani azo kokuguquguqukayo, futhi kukhona umyalo wokuqamba indlela (isihambisi noma ipayipi). Umyalo ngamunye osepayipini udlulisela okukhiphayo komunye olandelayo ngokulandelana, into ngento. Ukucubungula, ungasebenzisa ama-cmdlets ahlanganisiwe noma udale owakho izici eziphambiliukwenza ukukhohlisa okuhlukahlukene ngezinto ezisepayipini: ukuhlunga, ukuhlunga, ukuhlanganisa, ngisho nokushintsha isakhiwo sazo. Ukudlulisa idatha kuleli fomu kunenzuzo engathi sína: ithimba elamukelayo alidingi ukudlulisa ukusakaza kwe-byte (umbhalo), lonke ulwazi oludingekayo lutholakala kalula ngokubiza izakhiwo nezindlela ezifanele.

Ukubuka ukwakheka kwezinto

Isibonelo, ake sisebenzise i-Get-Process cmdlet, ekuvumela ukuthi uthole ulwazi mayelana nezinqubo ezisebenza ohlelweni:

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Izobonisa idatha ethile yombhalo efomethiwe enganikezi noma yimuphi umbono mayelana nezakhiwo zezinto ezibuyisiwe nezindlela zazo. Ukuze silungise okukhiphayo, sidinga ukufunda indlela yokuhlola ukwakheka kwezinto, futhi i-Get-Member cmdlet izosisiza ngalokhu:

Get-Process | Get-Member

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Lapha sesivele sibona uhlobo nesakhiwo, futhi ngosizo lwemingcele eyengeziwe singakwazi, isibonelo, ukubonisa kuphela izakhiwo zento efakwe okokufaka:

Get-Process | Get-Member -MemberType Property

Lolu lwazi luzodingeka ukuze uxazulule izinkinga zokuphatha ngokuhlanganyela noma ukubhala imibhalo yakho siqu: isibonelo, ukuthola ulwazi mayelana nezinqubo ezilengayo usebenzisa indawo yokuphendula.

Ukuhlunga izinto

I-PowerShell ivumela izinto ezihlangabezana nesimo esithile ukuthi zidlule ngepayipi:

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

Umphumela wokusebenzisa ibhulokhi yeskripthi phakathi kwabakaki kumelwe ube inani le-boolean. Uma kuyiqiniso ($true), into efakwayo kokuthi Where-Object cmdlet izodluliswa ngepayipi, ngaphandle kwalokho ($false) izosuswa. Isibonelo, ake sibonise uhlu lwezinsizakalo ezimisiwe zeWindows Server, i.e. labo abasesimweni sabo sisethwe ukuze sithi “Kumisiwe”:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Lapha futhi sibona ukumelwa kombhalo, kodwa uma ufuna ukuqonda uhlobo nesakhiwo sangaphakathi sezinto ezidlula epayipini akunzima:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ukuhlunga izinto

Lapho kucutshungulwa amapayipi ezinto, kuvame ukuba nesidingo sokuzihlunga. I-Sort-Object cmdlet idluliswa amagama ezakhiwo (okhiye bokuhlunga) futhi ibuyisela izinto ezi-odwe ngamavelu azo. Kulula ukuhlunga okukhiphayo kwezinqubo ezisebenzayo ngesikhathi se-CPU esichithiwe (impahla ye-cpu):

Get-Process | Sort-Object –Property cpu

Ipharamitha -Property ingashiywa lapho kubizwa i-Sort-Object cmdlet; isetshenziswa ngokuzenzakalelayo. Ukuhlunga ngokuhlehla, sebenzisa ipharamitha ethi -Descending:

Get-Process | Sort-Object cpu -Descending

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ukukhetha izinto nezingxenye zazo

I-Select-Object cmdlet ikuvumela ukuthi ukhethe inani elithile lezinto ekuqaleni noma ekupheleni kwepayipi usebenzisa ipharamitha -Yokuqala noma -Yokugcina. Ngosizo lwayo, ungakhetha izinto ezingashadile noma izakhiwo ezithile, futhi udale izinto ezintsha ngokusekelwe kuzo. Ake sibheke ukuthi i-cmdlet isebenza kanjani sisebenzisa izibonelo ezilula.

Umyalo olandelayo ubonisa ulwazi mayelana nezinqubo ezingu-10 ezisebenzisa inani eliphezulu le-RAM (impahla ye-WS):

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ungakhetha kuphela izakhiwo ezithile zezinto ezidlula epayipini bese udala ezintsha ngokusekelwe kuzo:

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

Njengomphumela wokusebenza kwepayipi, sizothola into entsha, ukwakheka kwayo okuzohluka esakhiweni esibuyiswe yi-Get-Process cmdlet. Masiqinisekise lokhu sisebenzisa i-Get-Member:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Qaphela ukuthi i-Select-Object ibuyisela into eyodwa (-First 1) enezinkambu ezimbili kuphela esizicacisile: amanani azo akopishwe entweni yokuqala edluliselwe epayipini yi-cmdlet ye-Get-Process. Enye yezindlela zokudala izinto kumibhalo ye-PowerShell isuselwe ekusebenziseni i-Select-Object:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ngokusebenzisa Khetha-Into, ungakwazi ukwengeza izakhiwo zekhompuyutha ezintweni ezidinga ukumelwa njenge amatafula e-hashi. Kulokhu, inani lokhiye walo wokuqala lihambisana negama lesakhiwo, futhi inani lokhiye wesibili lihambisana nenani lesakhiwo sesici samanje sepayipi:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ake sibheke ukwakheka kwezinto ezidlula ku-conveyor:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Kwento Ngayinye, Into Yeqembu kanye Nento Yokulinganisa

Kukhona amanye ama-cmdlets okusebenza ngezinto. Njengesibonelo, ake sikhulume ngezinto ezintathu eziwusizo kakhulu:

Into Ngayinye ikuvumela ukuthi usebenzise ikhodi ye-PowerShell entweni ngayinye esendleleni:

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

Iqembu-Into ihlanganisa izinto ngevelu yendawo:

Group-Object PropertyName

Uma uyisebenzisa ngepharamitha -NoElement, ungathola inani lezinto emaqenjini.

Kala-Into ihlanganisa amapharamitha afingqiwe ahlukahlukene ngamavelu enkambu yento ephayiphini (ibala isamba, futhi ithola ubuncane, inani eliphakeme noma elimaphakathi):

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

Imvamisa, ama-cmdlets okuxoxwe ngawo asetshenziswa ngokuhlanganyela, futhi avame ukudalwa emibhalweni. imisebenzi nge Qala, Inqubo futhi Qeda amabhlogo.

Ukudala izinto ze-NET kanye ne-COM (Into Entsha)

Ziningi izingxenye zesofthiwe ezine-.NET Core kanye ne-COM interface eziwusizo kubaphathi besistimu. Usebenzisa ikilasi le-System.Diagnostics.EventLog, ungaphatha amalogi esistimu ngokuqondile ku-Windows PowerShell. Ake sibheke isibonelo sokwenza isibonelo saleli klasi sisebenzisa i-New-Object cmdlet enepharamitha ye-TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Njengoba singacacisanga ilogu yomcimbi ethile, isibonelo esiwumphumela sekilasi asiqukethe idatha. Ukuze ushintshe lokhu, udinga ukubiza indlela yomakhi ekhethekile ngesikhathi sokudalwa kwayo usebenzisa ipharamitha ye-ArgumentList. Uma sifuna ukufinyelela kulogi yohlelo lokusebenza, kufanele sidlulise umucu othi "Isicelo" njengengxabano kumakhi:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Sicela uqaphele ukuthi silondoloze okukhiphayo komyalo kokuhluka kwe-$AppLog. Nakuba amapayipi ngokuvamile esetshenziswa kumodi yokusebenzisana, ukubhala imibhalo ngokuvamile kudinga ukugcinwa kwereferensi entweni. Ukwengeza, amakilasi angumongo we-.NET Core aqukethwe ku-System namespace: I-PowerShell ngokuzenzakalelayo ibheka izinhlobo ezishiwo kuyo, ngakho ukubhala i-Diagnostics.EventLog esikhundleni sokuthi i-System.Diagnostics.EventLog ilungile impela.

Ukuze usebenze nelogi, ungasebenzisa izindlela ezifanele:

$AppLog | Get-Member -MemberType Method

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ake sithi kusulwa ngendlela ye-Clear() uma kukhona amalungelo okufinyelela:

$AppLog.Clear()

I-cmdlet ye-New-Object nayo isetshenziselwa ukusebenza nezingxenye ze-COM. Ziningi impela - kusukela emitatsheni yolwazi ehlinzekwa nge-Windows script server kuya ezinhlelweni zokusebenza ze-ActiveX, njenge-Internet Explorer. Ukuze udale into ye-COM, udinga ukusetha ipharamitha -ComObject ngeProgId ehleliwe yekilasi olifunayo:

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

Ukuze udale izinto zakho ngesakhiwo esingenangqondo, usebenzisa i-New-Object ibonakala iyindala kakhulu futhi inzima; le cmdlet isetshenziselwa ukusebenza nezingxenye zesofthiwe ngaphandle kwe-PowerShell. Ezihlokweni ezizayo kuzoxoxwa kabanzi ngalo magazini. Ngokungeziwe ezintweni ze-NET ne-COM, sizophinda sihlole izinto ze-CIM (WMI) kanye ne-ADSI.

Ukushayela Izindlela Eziqinile

Amanye amakilasi e-NET Core awakwazi ukuqinisekiswa, okuhlanganisa i-System.Environment kanye ne-System.Math. Kunjalo i-static futhi iqukethe izici nezindlela ezimile kuphela. Lena imitapo yolwazi eyinkomba esetshenziswa ngaphandle kokudala izinto. Ungabhekisela ekilasini elimile ngokusebenzisa igama elingokoqobo ngokufaka igama lohlobo kubakaki abayisikwele. Nokho, uma sibheka ukwakheka kwento kusetshenziswa i-Get-Member, sizobona uhlobo lwe-System.RuntimeType esikhundleni se-System.Environment:

[System.Environment] | Get-Member

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ukuze ubuke amalungu amile kuphela, shayela i-Get-Member ngepharamitha ye--Static (qaphela uhlobo lwento):

[System.Environment] | Get-Member -Static

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ukuze ufinyelele izakhiwo ezimile nezindlela, sebenzisa amakholoni amabili alandelanayo esikhundleni senkathi engemuva kwengokoqobo:

[System.Environment]::OSVersion

Noma

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Thayipha i-PSCustomObject

Phakathi kwezinhlobo eziningi zedatha ezitholakala ku-PowerShell, kufanelekile ukusho i-PSCustomObject, eklanyelwe ukugcina izinto ngesakhiwo esingenangqondo. Ukudala into enjalo usebenzisa i-New-Object cmdlet kuthathwa njengendlela yakudala, kodwa enzima futhi ephelelwe yisikhathi:

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

Ake sibheke ukwakheka kwento:

$object | Get-Member

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ukuqala nge-PowerShell 3.0, enye i-syntax iyatholakala:

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

Ungafinyelela idatha ngenye yezindlela ezifanayo:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Nasi isibonelo sokuguqula i-hashtable ekhona ibe into:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Enye yezinto ezimbi zezinto zalolu hlobo ukuthi ukuhleleka kwezakhiwo zabo kungashintsha. Ukuze ugweme lokhu, kufanele usebenzise isibaluli [esi-odwe]:

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

Kukhona ezinye izinketho zokwenza into: ngenhla sibheke ukusebenzisa i-cmdlet Khetha-Into. Okusele nje ukuthola ukwengeza nokukhipha izakhi. Ukwenza lokhu entweni evela esibonelweni sangaphambilini kulula kakhulu:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

I-Engeza-Ilungu cmdlet ikuvumela ukuthi ungeze izakhiwo kuphela, kodwa nezindlela entweni ye-$ eyakhiwe ngaphambilini ngokusebenzisa ukwakhiwa kwe-"-MemberType ScriptMethod":

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

Sicela uqaphele ukuthi sisebenzise i-$ScriptBlock eguquguqukayo yohlobo lwe-ScriptBlock ukuze sigcine ikhodi yendlela entsha.

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ukuze ususe izakhiwo, sebenzisa indlela ehambisanayo:

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

Ukudala Amakilasi Akho

I-PowerShell 5.0 yethule ikhono lokuchaza amakilasi kusetshenziswa isici se-syntax yezilimi zokuhlela ezigxile entweni. Igama lesevisi elithi Class lihloselwe lokhu, ngemva kwalokho kufanele ucacise igama lekilasi futhi uchaze umzimba walo kubakaki bomsebenzisi:

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

Lolu uhlobo lweqiniso lwe-NET Core, olunomzimba ochaza izakhiwo zawo, izindlela, nezinye izici. Ake sibheke isibonelo sokuchaza ikilasi elilula kakhulu:

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

Ukwakha into (isibonelo sekilasi), sebenzisa i-cmdlet Into Entsha, noma uhlobo lwangempela [MyClass] kanye indlela ye-pseudostatic okusha (umakhi ozenzakalelayo):

$object = New-Object -TypeName MyClass

noma

$object = [MyClass]::new()

Ake sihlaziye ukwakheka kwento:

$object | Get-Member

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Ungakhohlwa mayelana nobubanzi: awukwazi ukubhekisela kuhlobo lwegama njengeyunithi yezinhlamvu noma usebenzise uhlobo lwangempela olungaphandle kweskripthi noma imojuli lapho isigaba sichazwa khona. Kulokhu, imisebenzi ingabuyisela izimo zekilasi (izinto) ezizofinyeleleka ngaphandle kwemojuli noma iskripthi.

Ngemva kokudala into, gcwalisa izakhiwo zayo:

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

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Qaphela ukuthi incazelo yekilasi ayicacisi kuphela izinhlobo zezakhiwo, kodwa futhi namanani azo azenzakalelayo:

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

Incazelo yendlela yekilasi ifana nencazelo yomsebenzi, kodwa ngaphandle kokusebenzisa igama lomsebenzi. Njengomsebenzi, amapharamitha adluliselwa ezindleleni uma kunesidingo:

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

Manje ummeleli wekilasi lethu angamamatheka:

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

Izindlela zingalayishwa kakhulu; ngaphezu kwalokho, ikilasi linayo izakhiwo ezimile nezindlela, kanye nabakhi amagama abo ahambisana negama lekilasi ngokwalo. Ikilasi elichazwe kusikripthi noma imojuli ye-PowerShell ingasebenza njengesisekelo kwesinye - lena yindlela ifa elisetshenziswa ngayo. Kulesi simo, kuvunyelwe ukusebenzisa amakilasi akhona e-NET njengesisekelo:

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

Incazelo yethu yokusebenza ngezinto ku-PowerShell ayipheleli neze. Ezincwadini ezilandelayo, sizozama ukujulisa ngezibonelo ezisebenzayo: isihloko sesihlanu ochungechungeni sizonikezwa ezindabeni zokuhlanganisa i-PowerShell nezingxenye zesofthiwe yomuntu wesithathu. Izingxenye ezedlule zingatholakala kuzixhumanisi ezingezansi.

Ingxenye 1: Izici Eziyisisekelo zeWindows PowerShell
Ingxenye 2: Isingeniso Se-Windows PowerShell Programming Language
Ingxenye 3: ukudlulisa amapharamitha kumaskripthi nemisebenzi, kwakha ama-cmdlets

Iyini iWindows PowerShell futhi isetshenziselwa ini? Ingxenye 4: Ukusebenza ngezinto, amakilasi akho

Source: www.habr.com

Engeza amazwana