Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Toleo la maandishi la amri katika dirisha la mkalimani la PowerShell ni njia tu ya kuonyesha habari katika fomu inayofaa kwa mtazamo wa mwanadamu. Kweli Jumatano iliyoelekezwa kufanya kazi na vitu: cmdlets na kazi hupokea kama pembejeo na akarudi kwenye njia ya kutoka, na aina tofauti zinazopatikana kwa mwingiliano na katika hati zinatokana na madarasa ya NET. Katika makala ya nne ya mfululizo, tutajifunza kufanya kazi na vitu kwa undani zaidi.

Jedwali la Yaliyomo:

Vitu katika PowerShell
Kuangalia muundo wa vitu
Kuchuja vitu
Kupanga vitu
Kuchagua vitu na sehemu zao
ForEach-Object, Group-Object na Pima-Object
Kuunda vipengee vya .NET na COM (Kitu Kipya)
Njia za Kupiga Simu
Chapa PSCustomObject
Kuunda Madarasa Yako Mwenyewe

Vitu katika PowerShell

Hebu tukumbuke kwamba kitu ni mkusanyiko wa mashamba ya data (mali, matukio, nk) na mbinu za usindikaji (mbinu). Muundo wake unaelezwa na aina, ambayo kwa kawaida inategemea madarasa yaliyotumiwa katika jukwaa la umoja la NET Core. Pia inawezekana kufanya kazi na vitu vya COM, CIM (WMI) na ADSI. Sifa na mbinu zinahitajika kufanya vitendo mbalimbali kwenye data; kwa kuongeza, katika PowerShell, vitu vinaweza kupitishwa kama hoja kwa kazi na cmdlets, kupewa maadili yao kwa vigezo, na pia kuna. utaratibu wa utungaji wa amri (conveyor au bomba). Kila amri kwenye bomba hupitisha pato lake kwa inayofuata kwa zamu, kitu kwa kitu. Kwa usindikaji, unaweza kutumia cmdlets iliyokusanywa au kuunda yako mwenyewe vipengele vya juukufanya udanganyifu mbalimbali na vitu kwenye bomba: kuchuja, kupanga, kuweka vikundi, na hata kubadilisha muundo wao. Kusambaza data katika fomu hii kuna faida kubwa: timu ya kupokea haina haja ya kuchanganua mkondo wa byte (maandishi), taarifa zote muhimu hupatikana kwa urahisi kwa kupiga simu mali na mbinu zinazofaa.

Kuangalia muundo wa vitu

Kwa mfano, wacha tuendeshe Get-Process cmdlet, ambayo hukuruhusu kupata habari kuhusu michakato inayoendeshwa kwenye mfumo:

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Itaonyesha data fulani ya maandishi iliyoumbizwa ambayo haitoi wazo lolote kuhusu sifa za vitu vilivyorejeshwa na mbinu zao. Ili kurekebisha matokeo, tunahitaji kujifunza jinsi ya kuchunguza muundo wa vitu, na Get-Member cmdlet itatusaidia na hili:

Get-Process | Get-Member

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Hapa tayari tunaona aina na muundo, na kwa msaada wa vigezo vya ziada tunaweza, kwa mfano, kuonyesha tu mali ya kitu kilichojumuishwa kwenye pembejeo:

Get-Process | Get-Member -MemberType Property

Ujuzi huu utahitajika ili kutatua matatizo ya utawala kwa maingiliano au kuandika hati zako mwenyewe: kwa mfano, kupata taarifa kuhusu michakato ya kupachika kwa kutumia mali ya Kujibu.

Kuchuja vitu

PowerShell inaruhusu vitu vinavyokidhi hali fulani kupitishwa kupitia bomba:

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

Matokeo ya kutekeleza kizuizi cha hati ndani ya mabano lazima yawe thamani ya boolean. Ikiwa ni kweli ($true), kitu ambacho kimeingizwa kwenye cmdlet ya Who-Object kitapitishwa kando ya bomba, vinginevyo ($false) kitafutwa. Kwa mfano, hebu tuonyeshe orodha ya huduma za Windows Server zilizosimamishwa, i.e. wale ambao mali yao ya Hali imewekwa kuwa "Imesimamishwa":

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Hapa tena tunaona uwakilishi wa maandishi, lakini ikiwa unataka kuelewa aina na muundo wa ndani wa vitu vinavyopita kwenye bomba si vigumu:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Kupanga vitu

Wakati wa usindikaji wa bomba la vitu, mara nyingi kuna haja ya kuzipanga. Cmdlet ya Kitu cha Kupanga hupitishwa majina ya mali (vifunguo vya kuchagua) na hurejesha vitu vilivyoagizwa na maadili yao. Ni rahisi kupanga matokeo ya michakato inayoendeshwa na wakati wa CPU uliotumika (mali ya cpu):

Get-Process | Sort-Object –Property cpu

Kigezo cha -Property kinaweza kuachwa wakati wa kupiga cmdlet ya Kitu cha Panga; inatumiwa kwa chaguo-msingi. Kwa kupanga nyuma, tumia -Descending parameta:

Get-Process | Sort-Object cpu -Descending

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Kuchagua vitu na sehemu zao

Chagua-Kitu cmdlet hukuruhusu kuchagua idadi maalum ya vitu mwanzoni au mwisho wa bomba kwa kutumia vigezo vya -Kwanza au -Mwisho. Kwa msaada wake, unaweza kuchagua vitu moja au mali fulani, na pia kuunda vitu vipya kulingana nao. Wacha tuangalie jinsi cmdlet inavyofanya kazi kwa kutumia mifano rahisi.

Amri ifuatayo inaonyesha habari kuhusu michakato 10 inayotumia kiwango cha juu cha RAM (mali ya WS):

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Unaweza kuchagua mali fulani tu ya vitu vinavyopita kwenye bomba na kuunda mpya kulingana nao:

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

Kama matokeo ya operesheni ya bomba, tutapokea kitu kipya, ambacho muundo wake utatofautiana na muundo uliorejeshwa na cmdlet ya Mchakato wa Kupata. Hebu tuthibitishe hili kwa kutumia Pata Mwanachama:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Kumbuka kuwa Select-Object inarudisha kitu kimoja (-First 1) ambacho kina sehemu mbili tu tulizobainisha: thamani zake zilinakiliwa kutoka kwa kitu cha kwanza kilichopitishwa kwenye bomba na Get-Process cmdlet. Mojawapo ya njia za kuunda vitu katika hati za PowerShell inategemea kutumia Select-Object:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Kwa kutumia Select-Object, unaweza kuongeza mali zilizokokotwa kwa vitu vinavyohitaji kuwakilishwa kama meza za hashi. Katika kesi hii, thamani ya ufunguo wake wa kwanza inalingana na jina la mali, na thamani ya ufunguo wa pili inalingana na thamani ya mali ya kipengele cha sasa cha bomba:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Wacha tuangalie muundo wa vitu vinavyopita kupitia conveyor:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

ForEach-Object, Group-Object na Pima-Object

Kuna cmdlets zingine za kufanya kazi na vitu. Kama mfano, hebu tuzungumze juu ya tatu muhimu zaidi:

Kwa Kila Kitu hukuruhusu kuendesha msimbo wa PowerShell kwa kila kitu kwenye bomba:

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

Kikundi-Kitu huweka vitu kwa thamani ya mali:

Group-Object PropertyName

Ikiwa utaiendesha na kigezo cha -NoElement, unaweza kujua idadi ya vitu kwenye vikundi.

Pima-Kitu hukusanya vigezo mbalimbali vya muhtasari na maadili ya uwanja wa kitu kwenye bomba (huhesabu jumla, na pia hupata thamani ya chini, ya juu au ya wastani):

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

Kwa kawaida, cmdlets zilizojadiliwa hutumiwa kwa maingiliano, na mara nyingi huundwa katika hati. kazi na Anza, Mchakato na Maliza vitalu.

Kuunda vipengee vya .NET na COM (Kitu Kipya)

Kuna vipengele vingi vya programu vilivyo na violesura vya .NET Core na COM ambavyo ni muhimu kwa wasimamizi wa mfumo. Kwa kutumia darasa la System.Diagnostics.EventLog, unaweza kudhibiti kumbukumbu za mfumo moja kwa moja kutoka Windows PowerShell. Wacha tuangalie mfano wa kuunda mfano wa darasa hili kwa kutumia New-Object cmdlet na parameta ya -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Kwa kuwa hatukubainisha kumbukumbu maalum ya tukio, mfano unaotokana wa darasa hauna data. Ili kubadilisha hii, unahitaji kupiga simu njia maalum ya wajenzi wakati wa uumbaji wake kwa kutumia parameter -ArgumentList. Ikiwa tunataka kufikia logi ya programu, tunapaswa kupitisha kamba "Maombi" kama hoja kwa mjenzi:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Tafadhali kumbuka kuwa tulihifadhi matokeo ya amri katika tofauti ya $AppLog. Ingawa mabomba hutumiwa kwa kawaida katika hali ya mwingiliano, kuandika hati mara nyingi huhitaji kudumisha marejeleo ya kitu. Zaidi ya hayo, madarasa ya msingi ya NET Core yamo katika nafasi ya majina ya Mfumo: PowerShell kwa chaguomsingi hutafuta aina zilizobainishwa ndani yake, kwa hivyo kuandika Diagnostics.EventLog badala ya System.Diagnostics.EventLog ni sahihi kabisa.

Ili kufanya kazi na logi, unaweza kutumia njia zinazofaa:

$AppLog | Get-Member -MemberType Method

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Wacha tuseme imesafishwa na njia ya Clear() ikiwa kuna haki za ufikiaji:

$AppLog.Clear()

Cmdlet ya Kitu Kipya pia hutumiwa kufanya kazi na vijenzi vya COM. Kuna mengi yao - kutoka kwa maktaba zinazotolewa na seva ya hati ya Windows hadi programu za ActiveX, kama vile Internet Explorer. Ili kuunda kitu cha COM, unahitaji kuweka parameta -ComObject na ProgId ya programu ya darasa unayotaka:

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

Ili kuunda vitu vyako mwenyewe na muundo wa kiholela, kutumia New-Object inaonekana kuwa ya kizamani na ngumu; cmdlet hii hutumiwa kufanya kazi na vifaa vya programu nje ya PowerShell. Katika makala zijazo suala hili litajadiliwa kwa undani zaidi. Mbali na vipengee vya .NET na COM, tutachunguza pia vitu vya CIM (WMI) na ADSI.

Njia za Kupiga Simu

Baadhi ya madarasa ya NET Core hayawezi kuanzishwa, ikiwa ni pamoja na System.Environment na System.Math. Wao ni tuli na vyenye tu mali tuli na mbinu. Hizi ni maktaba za kumbukumbu ambazo hutumiwa bila kuunda vitu. Unaweza kurejelea darasa tuli kupitia halisi kwa kuambatanisha jina la aina katika mabano ya mraba. Hata hivyo, tukiangalia muundo wa kitu kwa kutumia Get-Member, tutaona aina ya System.RuntimeType badala ya System.Environment:

[System.Environment] | Get-Member

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Ili kutazama washiriki tuli pekee, piga simu ya Get-Member kwa -Static parameta (kumbuka aina ya kitu):

[System.Environment] | Get-Member -Static

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Ili kufikia mali na mbinu tuli, tumia koloni mbili mfululizo badala ya kipindi baada ya halisi:

[System.Environment]::OSVersion

Au

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Chapa PSCustomObject

Miongoni mwa aina nyingi za data zinazopatikana katika PowerShell, inafaa kutaja PSCustomObject, iliyoundwa kwa ajili ya kuhifadhi vitu na muundo wa kiholela. Kuunda kitu kama hicho kwa kutumia New-Object cmdlet inachukuliwa kuwa ya kawaida, lakini njia ngumu na ya zamani:

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

Wacha tuangalie muundo wa kitu:

$object | Get-Member

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Kuanzia na PowerShell 3.0, syntax nyingine inapatikana:

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

Unaweza kufikia data kwa njia moja sawa:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Hapa kuna mfano wa kubadilisha hashtable iliyopo kuwa kitu:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Moja ya hasara za vitu vya aina hii ni kwamba utaratibu wa mali zao unaweza kubadilika. Ili kuepuka hili, lazima utumie sifa [iliyoagizwa]:

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

Kuna chaguzi zingine za kuunda kitu: hapo juu tuliangalia kutumia cmdlet Chagua-Kitu. Kinachobaki ni kufikiria kuongeza na kuondoa vitu. Kufanya hivi kwa kitu kutoka kwa mfano uliopita ni rahisi sana:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Cmdlet ya Mwanachama wa Ongeza hukuruhusu kuongeza sio mali tu, bali pia njia kwa $object iliyoundwa hapo awali kwa kutumia "-MemberType ScriptMethod" ujenzi:

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

Tafadhali kumbuka kuwa tulitumia aina tofauti ya $ScriptBlock ya ScriptBlock kuhifadhi msimbo wa mbinu mpya.

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Ili kuondoa mali, tumia njia inayolingana:

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

Kuunda Madarasa Yako Mwenyewe

PowerShell 5.0 ilianzisha uwezo wa kufafanua darasa kwa kutumia sifa za sintaksia za lugha za programu zinazolengwa na kitu. Neno la huduma Class limekusudiwa kwa hili, baada ya hapo unapaswa kutaja jina la darasa na kuelezea mwili wake katika mabano ya waendeshaji:

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

Hii ni aina ya kweli ya NET Core, yenye mwili unaoelezea sifa zake, mbinu na vipengele vingine. Wacha tuangalie mfano wa kufafanua darasa rahisi zaidi:

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

Ili kuunda kitu (mfano wa darasa), tumia cmdlet Kitu Kipya, au aina halisi ya [MyClass] na njia ya pseudostatic mpya (mjenzi chaguomsingi):

$object = New-Object -TypeName MyClass

au

$object = [MyClass]::new()

Wacha tuchambue muundo wa kitu:

$object | Get-Member

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Usisahau kuhusu upeo: huwezi kurejelea jina la aina kama mfuatano au kutumia aina halisi nje ya hati au moduli ambamo darasa limefafanuliwa. Katika hali hii, chaguo za kukokotoa zinaweza kurudisha matukio ya darasa (vitu) ambavyo vitafikiwa nje ya moduli au hati.

Baada ya kuunda kitu, jaza mali zake:

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

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Kumbuka kuwa maelezo ya darasa hayabainishi tu aina za mali, lakini pia maadili yao ya msingi:

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

Maelezo ya mbinu ya darasa yanafanana na maelezo ya chaguo za kukokotoa, lakini bila kutumia neno la kukokotoa. Kama katika kazi, vigezo hupitishwa kwa njia ikiwa ni lazima:

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

Sasa mwakilishi wa darasa letu anaweza kutabasamu:

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

Njia zinaweza kupakiwa; kwa kuongeza, darasa lina mali na mbinu tuli, pamoja na wajenzi ambao majina yao yanapatana na jina la darasa lenyewe. Darasa lililofafanuliwa katika hati au moduli ya PowerShell inaweza kutumika kama msingi kwa mwingine - hivi ndivyo urithi unavyotekelezwa. Katika kesi hii, inaruhusiwa kutumia darasa zilizopo za NET kama msingi:

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

Maelezo yetu ya kufanya kazi na vitu katika PowerShell sio kamili. Katika machapisho yafuatayo, tutajaribu kuimarisha kwa mifano ya vitendo: makala ya tano katika mfululizo itatolewa kwa masuala ya kuunganisha PowerShell na vipengele vya programu ya tatu. Sehemu za nyuma zinaweza kupatikana kwenye viungo hapa chini.

Sehemu ya 1: Vipengele vya Msingi vya Windows PowerShell
Sehemu ya 2: Utangulizi wa Lugha ya Kuprogramu ya Windows PowerShell
Sehemu ya 3: kupitisha vigezo kwa hati na kazi, kuunda cmdlets

Windows PowerShell ni nini na inatumika kwa nini? Sehemu ya 4: Kufanya kazi na vitu, madarasa yako mwenyewe

Chanzo: mapenzi.com

Kuongeza maoni