Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Imveliso yokubhaliweyo yemiyalelo kwifestile ye-PowerShell yetoliki yindlela nje yokubonisa ulwazi kwifomu efanelekileyo kwimbono yomntu. Ngokwenene ngoLwesithathu ijolise ukusebenza ngezinto: cmdlets kunye nemisebenzi izifumana njengegalelo kunye wabuyela ekuphumeni, kunye neentlobo eziguquguqukayo ezikhoyo ngokusebenzisana kunye nakwizikripti zisekwe kwiiklasi ze.NET. Kwinqaku lesine loluhlu, siya kufunda ukusebenza kunye nezinto ngokubanzi.

Isiqulatho:

Izinto kwi-PowerShell
Ukujonga ubume bezinto
Ukuhluza izinto
Ukuhlela izinto
Ukukhetha izinto kunye namalungu azo
Into-Nganye-Into, iQela-Into kunye neNjongo yoMlinganiselo
Ukudala izinto ze-.NET kunye ne-COM (Into-entsha)
Ukufowunela Iindlela zeStatic
Chwetheza PSCustomObject
Ukuzenzela Ezakho Iiklasi

Izinto kwi-PowerShell

Masikhumbule ukuba into yingqokelela yemimandla yedatha (iipropati, iziganeko, njl.) kunye neendlela zokuzilungisa (iindlela). Ubume bayo bucaciswe ngohlobo, oluqhele ukusekwe kwiiklasi ezisetyenziswa kwiqonga elidityanisiweyo .NET Core. Kwakhona kunokwenzeka ukuba usebenze ngezinto ze-COM, CIM (WMI) kunye ne-ADSI. Iipropati kunye neendlela ziyafuneka ukwenza izenzo ezahlukeneyo kwidatha; ukongeza, kwi-PowerShell, izinto zinokugqithiswa njengeengxoxo kwimisebenzi kunye ne-cmdlets, zabelwe amaxabiso azo kwiinguqu, kwaye kukho kwakhona. indlela yokwakheka komyalelo (umhambisi okanye umbhobho). Umyalelo ngamnye kumbhobho udlulisela imveliso yawo kwelinye elilandelayo ngokulandelelana, into ngento. Ukuqhubekeka, ungasebenzisa i-cmdlets eqokelelweyo okanye uzenzele eyakho iimpawu eziphambiliukwenza iinguqulelo ezahlukeneyo ngezinto ezikwimibhobho: ukuhluza, ukuhlela, ukwahlula, kunye nokutshintsha ubume bazo. Ukudlulisa idatha kule fom kunenzuzo enkulu: iqela elifumanayo alidingi ukuhlaziya i-byte stream (isicatshulwa), lonke ulwazi oluyimfuneko lufumaneka ngokulula ngokubiza iipropati ezifanelekileyo kunye neendlela.

Ukujonga ubume bezinto

Umzekelo, masiqhube i-Get-Process cmdlet, ekuvumela ukuba ufumane ulwazi malunga neenkqubo ezisebenza kwinkqubo:

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Iza kubonisa idatha ethile ebhaliweyo efomathiweyo enganiki nayiphi na ingcamango malunga neempawu zezinto ezibuyisiweyo kunye neendlela zazo. Ukucokisa imveliso, kufuneka sifunde indlela yokujonga ubume bezinto, kwaye i-Get-Lungu cmdlet iya kusinceda ngale nto:

Get-Process | Get-Member

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Apha sele sibona uhlobo kunye nesakhiwo, kwaye ngoncedo lweeparamitha ezongezelelweyo singakwazi, umzekelo, ukubonisa kuphela iipropati zento ezibandakanyiweyo kwigalelo:

Get-Process | Get-Member -MemberType Property

Olu lwazi luya kufuneka ukusombulula iingxaki zolawulo ngokusebenzisana okanye ukubhala izikripthi zakho: umzekelo, ukufumana ulwazi malunga neenkqubo ezixhonyiweyo usebenzisa ipropati yokuPhendula.

Ukuhluza izinto

I-PowerShell ivumela izinto ezidibana nemeko ethile ukuba zigqithwe ngombhobho:

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

Isiphumo sokusetyenziswa kwebhloko yeskripthi ngaphakathi kwabazali kufuneka sibe lixabiso le boolean. Ukuba yinyani ($true), into efakwa kwi- Where-Object cmdlet iyakugqithiselwa ecaleni kombhobho, kungenjalo ($false) iya kucinywa. Umzekelo, masibonise uluhlu lweenkonzo ezimisiweyo zeSeva yeWindows, okt. abo ubume bobume babo busetelwe “Kuyekiswa”:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Apha kwakhona sibona ukumelwa okubhaliweyo, kodwa ukuba ufuna ukuqonda uhlobo kunye nesakhiwo sangaphakathi sezinto ezidlula kumbhobho akunzima:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Ukuhlela izinto

Xa ukusetyenzwa kwemibhobho yezinto, kuhlala kukho isidingo sokuzihlela. I-Sort-Object cmdlet igqithiselwe amagama eepropati (izitshixo zokuhlela) kwaye ibuyisela izinto ezicwangciswe ngamaxabiso azo. Kulula ukuhlenga imveliso yeenkqubo ezisebenzayo ngexesha le-CPU elichithwe (ipropathi ye-cpu):

Get-Process | Sort-Object –Property cpu

I -Property iparameter inokushiyeka xa ubiza i Cmdlet yeNgcaciso-nkqubo, isetyenziswa ngokungagqibekanga. Ukuhlenga umva, sebenzisa i -Ukwehla iparamitha:

Get-Process | Sort-Object cpu -Descending

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Ukukhetha izinto kunye namalungu azo

I Khetha-Into cmdlet ikuvumela ukuba ukhethe inani elithile lezinto ekuqaleni okanye ekupheleni kombhobho usebenzisa i -First or -Last parameters. Ngoncedo lwayo, unokukhetha izinto ezingatshatanga okanye iipropathi ezithile, kwaye wenze izinto ezintsha ezisekelwe kuzo. Makhe sijonge indlela i-cmdlet esebenza ngayo usebenzisa imizekelo elula.

Lo myalelo ulandelayo ubonisa ulwazi malunga neenkqubo ezili-10 ezisebenzisa ubuninzi be-RAM (ipropathi ye-WS):

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Unokukhetha kuphela iipropathi ezithile zezinto ezidlula kumbhobho kwaye wenze ezintsha ezisekwe kuzo:

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

Njengomphumo wokusebenza kombhobho, siya kufumana into entsha, isakhiwo esiya kuhluka kwisakhiwo esibuyiselwe yi-Get-Process cmdlet. Masiqinisekise oku sisebenzisa Fumana iLungu:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Qaphela ukuba i-Khetha-Object ibuyisela into enye (-Yokuqala 1) enemihlaba emibini kuphela esiyichazileyo: amaxabiso abo akhutshelwe ukusuka kwinto yokuqala egqithiselwe kumbhobho yi-Get-Process cmdlet. Enye yeendlela zokwenza izinto kwizikripthi zePowerShell isekwe ekusebenziseni Khetha-iNto:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Usebenzisa Khetha-Into, unokongeza iipropati ezibaliweyo kwizinto ezifuna ukumelwa njenge iitafile zehash. Kule meko, ixabiso lesitshixo salo sokuqala lihambelana negama lepropati, kwaye ixabiso lesitshixo sesibini lihambelana nexabiso lepropati yento yombhobho yangoku:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Makhe sijonge kwisakhiwo sezinto ezidlula kumhambisi:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Into-Nganye-Into, iQela-Into kunye neNjongo yoMlinganiselo

Kukho ezinye ii-cmdlets zokusebenza ngezinto. Njengomzekelo, makhe sithethe ngezona zithathu ziluncedo:

Into-Nganye ikuvumela ukuba usebenzise ikhowudi ye-PowerShell yento nganye ekumbhobho:

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

Iqela-Into amaqela izinto ngexabiso lepropati:

Group-Object PropertyName

Ukuba uqhuba nge-NoElement iparamitha, ungafumana inani lezinto kumaqela.

Umlinganiselo-Into ihlanganisa iiparamitha ezahlukeneyo zesishwankathelo ngamaxabiso entsimi yento kumbhobho (ubala isixa, kwaye ufumana ubuncinci, ubuninzi okanye ixabiso eliphakathi):

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

Ngokuqhelekileyo, ii-cmdlets ezixoxiwe zisetyenziselwa ukusebenzisana, kwaye zihlala ziyilwa kwizikripthi. msebenzi ngeQalisa, Inkqubo kunye neebhloko zokuQeda.

Ukudala izinto ze-.NET kunye ne-COM (Into-entsha)

Kukho amacandelo amaninzi esoftware ene-.NET Core kunye nojongano lweCOM oluluncedo kubalawuli benkqubo. Ukusebenzisa i-System.Diagnostics.EventLog iklasi, unokulawula iilogi zenkqubo ngokuthe ngqo kwi-Windows PowerShell. Makhe sijonge kumzekelo wokwenza umzekelo wolu didi usebenzisa i-cmdlet yeNto-Entsha ene--TypeName iparamitha:

New-Object -TypeName System.Diagnostics.EventLog

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Ekubeni singakhange sichaze i-log yesiganeko esithile, umzekelo obangelwayo weklasi awunadatha. Ukutshintsha oku, kufuneka ubize indlela ekhethekileyo yomakhi ngexesha lokudalwa kwayo usebenzisa i-parameter ye-ArgumentList. Ukuba sifuna ukufikelela kwilog yesicelo, kufuneka sigqithise umtya othi "Isicelo" njengengxabano kumakhi:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Nceda uqaphele ukuba sigcine imveliso yomyalelo kwi-$ AppLog variable. Nangona imibhobho isetyenziswa ngokuqhelekileyo kwimo yokunxibelelana, ukubhala izikripthi kudla ngokufuna ukugcinwa kwereferensi kwinto ethile. Ukongeza, undoqo .NET Iiklasi ezingundoqo ziqulathwe kwiSixokelelwano samagama: I-PowerShell ngokungagqibekanga ijonga iindidi ezikhankanyiweyo kuyo, ngoko ukubhala Diagnostics.EventLog endaweni ye System.Diagnostics.EventLog ichanekile.

Ukusebenza ngelog, ungasebenzisa iindlela ezifanelekileyo:

$AppLog | Get-Member -MemberType Method

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Masithi icocwe yi-Clear() indlela ukuba kukho amalungelo ofikelelo:

$AppLog.Clear()

I-cmdlet ye-New-Object iphinda isetyenziswe ukusebenza ngamacandelo e-COM. Zininzi kakhulu - ukusuka kumathala eencwadi abonelelwe ngeWindows script server ukuya kwi-ActiveX izicelo, ezinje nge-Internet Explorer. Ukwenza into ye-COM, kufuneka usete i- -ComObject parameter ngeProgId yeprogram yeklasi oyifunayo:

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

Ukwenza izinto zakho ngolwakhiwo olungenasizathu, usebenzisa i-New-Object ibonakala iyinto yakudala kakhulu kwaye inzima; le cmdlet isetyenziselwa ukusebenza nezinto zesoftware ngaphandle kwePowerShell. Kumanqaku azayo le nkupho iza kuxutyushwa ngokweenkcukacha. Ukongeza kwizinto ze-NET kunye ne-COM, siya kuhlola kwakhona izinto zeCIM (WMI) kunye ne-ADSI.

Ukufowunela Iindlela zeStatic

Ezinye iiklasi zeNET Core azinakuqinisekiswa, ukuquka iSystem.Environment and System.Math. Bazi I-static kwaye iqulathe iipropati ezimileyo kunye neendlela. La ngamathala eencwadi asetyenziswa ngaphandle kokudala izinto. Ungabhekisa kudidi olungashukumiyo ngokusebenzisa i-literal ngokuvala uhlobo lwegama kwizibiyeli ezisikwere. Nangona kunjalo, ukuba sijonga kulwakhiwo lwento usebenzisa i-Get-Lungu, siya kubona uhlobo lweSistim.RuntimeType endaweni ye-System.Environment:

[System.Environment] | Get-Member

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Ukujonga kuphela amalungu angatshintshiyo, fowunela i-Get-Lungu nge -Static parameter (qaphela uhlobo lwento):

[System.Environment] | Get-Member -Static

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Ukufikelela kwiipropathi ezimileyo kunye neendlela, sebenzisa iikholoni ezimbini ezilandelelanayo endaweni yexesha emva kokoqobo:

[System.Environment]::OSVersion

Okanye

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Chwetheza PSCustomObject

Phakathi kweentlobo ezininzi zedatha ezifumanekayo kwi-PowerShell, kufanelekile ukukhankanya i-PSCustomObject, eyenzelwe ukugcina izinto ngesakhiwo esingenasizathu. Ukudala into enjalo usebenzisa i-cmdlet ye-New-Object ithathwa njengeyona ndlela yakudala, kodwa inzima kwaye iphelelwe lixesha:

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

Makhe sijonge isakhiwo sento:

$object | Get-Member

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Ukuqala ngePowerShell 3.0, enye i-syntax iyafumaneka:

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

Unokufikelela kwidatha ngenye yeendlela ezifanayo:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Nanku umzekelo wokuguqula i-hashtable ekhoyo ibe yinto:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Enye yezinto ezingalunganga zezinto zolu hlobo kukuba umyalelo weempawu zabo unokutshintsha. Ukunqanda oku, kufuneka usebenzise uphawu [olucwangcisiweyo]:

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

Kukho ezinye iinketho zokwenza into: ngaphezulu sijonge ukusebenzisa i cmdlet Khetha-Into. Konke okuseleyo kukufumana ukongeza kunye nokususa izinto. Ukwenza oku kwinto evela kumzekelo wangaphambili kulula kakhulu:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

I-cmdlet yokudibanisa-iLungu ikuvumela ukuba ungeze kungekuphela nje iipropati, kodwa kunye neendlela kwi-object eyenziwe ngaphambili ngokusebenzisa i-"-MemberType ScriptMethod" ukwakha:

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

Nceda uqaphele ukuba sisebenzise i-$ScriptBlock eguquguqukayo yohlobo lwe-ScriptBlock ukugcina ikhowudi yendlela entsha.

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Ukususa iipropathi, sebenzisa indlela ehambelanayo:

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

Ukuzenzela Ezakho Iiklasi

I-PowerShell 5.0 yazisa amandla okuchaza iiklasi kusetyenziswa uphawu lwesintaksi lweelwimi zodweliso ezijolise kwinto. Igama lenkonzo Udidi lwenzelwe oku, emva koko kufuneka uchaze igama lodidi kwaye uchaze umzimba walo kwizibiyeli zomsebenzisi:

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

Olu yinyaniso yodidi lwe-NET Core, enomzimba ochaza iipropati zawo, iindlela, kunye nezinye izinto. Makhe sijonge umzekelo wokuchaza eyona klasi ilula:

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

Ukwenza into (umzekelo weklasi), sebenzisa i cmdlet Entsha-Into, okanye uhlobo oluthile [MyClass] kunye indlela yepseudostatic entsha (umakhi ohlala ehleli):

$object = New-Object -TypeName MyClass

okanye

$object = [MyClass]::new()

Makhe sihlalutye isakhiwo sento:

$object | Get-Member

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Ungalibali malunga nobubanzi: awukwazi ukubhekisa kuhlobo lwegama njengomtya okanye usebenzise uhlobo oluthile ngaphandle kweskripthi okanye imodyuli apho iklasi ichazwa khona. Kule meko, imisebenzi inokubuyisela iimeko zeklasi (izinto) eziza kufumaneka ngaphandle kwemodyuli okanye iskripthi.

Emva kokudala into, gcwalisa iimpawu zayo:

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

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

Qaphela ukuba inkcazo yeklasi ayikhankanyi kuphela iindidi zepropati, kodwa kunye namaxabiso azo angagqibekanga:

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

Inkcazo yendlela yeklasi ifana nenkcazo yomsebenzi, kodwa ngaphandle kokusebenzisa igama lomsebenzi. Njengomsebenzi, iiparamitha zigqithiselwa kwiindlela ukuba kuyimfuneko:

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

Ngoku ummeli weklasi yethu unokuncuma:

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

Iindlela zinokugcwala kakhulu; ukongeza, iklasi inakho iimpawu ezimileyo kunye neendlela, kunye nabakhi amagama abo ahambelana negama leklasi ngokwayo. Iklasi echazwe kwiskripthi okanye imodyuli ye-PowerShell inokusebenza njengesiseko somnye - le yindlela ilifa eliphunyezwa ngayo. Kulo mzekelo, kuvumelekile ukusebenzisa iiklasi ezikhoyo ze-NET njengesiseko:

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

Inkcazo yethu yokusebenza ngezinto kwi-PowerShell ayide iphele. Kolu papasho lulandelayo, siya kuzama ukulwenza nzulu ngemizekelo esebenzayo: inqaku lesihlanu kuthotho liya kunikezelwa kwimiba yokudibanisa i-PowerShell kunye namacandelo esoftware yomntu wesithathu. Amalungu adlulileyo anokufumaneka kwezi linki zingezantsi.

Icandelo 1: Iimpawu ezisisiseko zeWindows PowerShell
Icandelo 2: Intshayelelo kwiWindows PowerShell Programming Language
Icandelo 3: ukudlulisa iiparamitha kwizikripthi kunye nemisebenzi, ukwenza ii-cmdlets

Yintoni iWindows PowerShell kwaye isetyenziselwa ntoni? Icandelo 4: Ukusebenza ngezinto, iiklasi zakho

umthombo: www.habr.com

Yongeza izimvo