Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Textaúttak skipana í PowerShell túlkunarglugganum er bara leið til að birta upplýsingar á formi sem hentar mannlegri skynjun. Reyndar miðvikudagur stillt til að vinna með hluti: cmdlets og aðgerðir fá þá sem inntak og sneri aftur við útganginn, og breytutegundirnar sem eru tiltækar gagnvirkt og í forskriftum eru byggðar á .NET flokkum. Í fjórðu grein seríunnar verður farið nánar yfir vinnu með hluti.

Lýsing:

Hlutir í PowerShell
Skoða uppbyggingu hluta
Sía hluti
Að flokka hluti
Val á hlutum og hlutum þeirra
ForHver-Object, Group-Object og Measure-Object
Að búa til .NET og COM hluti (New-Object)
Að hringja í Static Methods
Sláðu inn PSCustomObject
Búðu til þína eigin flokka

Hlutir í PowerShell

Við skulum minnast þess að hlutur er safn gagnasviða (eiginleika, atburða osfrv.) og aðferðir til að vinna úr þeim (aðferðir). Uppbygging þess er tilgreind með gerð, sem er venjulega byggð á flokkum sem notaðir eru í sameinuðu .NET Core vettvangnum. Einnig er hægt að vinna með COM, CIM (WMI) og ADSI hluti. Eiginleikar og aðferðir eru nauðsynlegar til að framkvæma ýmsar aðgerðir á gögnum; að auki, í PowerShell, er hægt að senda hluti sem rök fyrir föll og cmdlet, úthluta gildi þeirra til breytum, og það er líka skipanasamsetningarkerfi (færiband eða leiðsla). Hver skipun í leiðslunni sendir úttak sitt til þeirrar næstu, hlut fyrir hlut. Til vinnslu geturðu notað samansett cmdlet eða búið til þína eigin háþróaðir eiginleikarað framkvæma ýmsar meðhöndlun með hluti í leiðslunni: sía, flokka, flokka og jafnvel breyta uppbyggingu þeirra. Að senda gögn á þessu formi hefur alvarlegan kost: móttökuteymið þarf ekki að flokka bætistrauminn (texta), allar nauðsynlegar upplýsingar eru auðveldlega sóttar með því að hringja í viðeigandi eiginleika og aðferðir.

Skoða uppbyggingu hluta

Til dæmis skulum við keyra Get-Process cmdlet, sem gerir þér kleift að fá upplýsingar um ferla sem keyra í kerfinu:

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Það mun birta nokkur sniðin textagögn sem gefa enga hugmynd um eiginleika hlutanna sem skilað er og aðferðir þeirra. Til að fínstilla úttakið þurfum við að læra hvernig á að skoða uppbyggingu hluta, og Get-Member cmdletið mun hjálpa okkur með þetta:

Get-Process | Get-Member

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Hér sjáum við nú þegar gerð og uppbyggingu og með hjálp viðbótarfæribreyta getum við til dæmis aðeins sýnt eiginleika hlutarins sem er með í inntakinu:

Get-Process | Get-Member -MemberType Property

Þessi þekking verður nauðsynleg til að leysa stjórnunarvandamál á gagnvirkan hátt eða til að skrifa eigin forskriftir: til dæmis til að fá upplýsingar um hengd ferli með því að nota eiginleikann Svarandi.

Sía hluti

PowerShell leyfir hlutum sem uppfylla ákveðin skilyrði að fara í gegnum leiðslu:

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

Niðurstaðan af því að keyra skriftublokkina innan sviga verður að vera Boolean gildi. Ef það er satt ($true), mun hlutnum sem er inntak í Where-Object cmdletið fara eftir leiðslunni, annars ($false) verður honum eytt. Til dæmis skulum við birta lista yfir stöðvaða Windows Server þjónustu, þ.e. þeir sem hafa stöðueiginleikann sem er stilltur á „Stoppað“:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Hér sjáum við aftur textaframsetningu, en ef þú vilt skilja gerð og innri uppbyggingu hlutanna sem fara í gegnum leiðsluna er það ekki erfitt:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Að flokka hluti

Við leiðsluvinnslu á hlutum er oft þörf á að flokka þá. Sort-Object cmdlet fær nöfn eiginleika (flokkunarlykla) og skilar hlutum raðað eftir gildum þeirra. Það er auðvelt að flokka úttak keyrandi ferla eftir örgjörvatíma sem varið er (eiginleika örgjörva):

Get-Process | Sort-Object –Property cpu

Hægt er að sleppa -Property færibreytunni þegar hringt er í Sort-Object cmdletið; það er sjálfgefið notað. Fyrir öfuga flokkun, notaðu -Descending færibreytuna:

Get-Process | Sort-Object cpu -Descending

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Val á hlutum og hlutum þeirra

Select-Object cmdlet gerir þér kleift að velja ákveðinn fjölda hluta í upphafi eða lok leiðslu með því að nota -First eða -Last færibreyturnar. Með hjálp þess geturðu valið staka hluti eða ákveðna eiginleika og einnig búið til nýja hluti út frá þeim. Við skulum skoða hvernig cmdlet virkar með einföldum dæmum.

Eftirfarandi skipun sýnir upplýsingar um 10 ferla sem neyta hámarks vinnsluminni (WS eign):

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Þú getur aðeins valið ákveðna eiginleika hluta sem fara í gegnum leiðsluna og búið til nýja út frá þeim:

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

Vegna reksturs leiðslunnar munum við fá nýjan hlut, uppbygging hans mun vera frábrugðin uppbyggingunni sem Get-Process cmdlet skilar. Við skulum staðfesta þetta með því að nota Get-Member:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Athugaðu að Select-Object skilar einum hlut (-First 1) sem hefur aðeins tvo af reitunum sem við tilgreindum: gildi þeirra voru afrituð frá fyrsta hlutnum sem var flutt inn í leiðsluna með Get-Process cmdlet. Ein af leiðunum til að búa til hluti í PowerShell skriftum byggist á því að nota Select-Object:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Með því að nota Select-Object er hægt að bæta reiknuðum eiginleikum við hluti sem þarf að tákna sem kjötkássa töflur. Í þessu tilviki samsvarar gildi fyrsta lykils þess eignarheitisins og gildi annars lykils samsvarar eignargildi fyrir núverandi leiðsluþátt:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Við skulum skoða uppbyggingu hluta sem fara í gegnum færibandið:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

ForHver-Object, Group-Object og Measure-Object

Það eru aðrir cmdlets til að vinna með hluti. Sem dæmi skulum við tala um þrjár gagnlegustu:

Fyrir hvern hlut gerir þér kleift að keyra PowerShell kóða fyrir hvern hlut í leiðslunni:

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

Hópur-hlutur flokkar hluti eftir eignargildi:

Group-Object PropertyName

Ef þú keyrir það með -NoElement færibreytunni geturðu fundið út fjölda staka í hópunum.

Mál-hlutur safnar saman ýmsum yfirlitsbreytum eftir gildum hlutasviðs í leiðslunni (reiknar summan og finnur einnig lágmarks-, hámarks- eða meðalgildi):

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

Venjulega eru cmdletarnir sem fjallað er um notuð gagnvirkt og eru oft búnir til í forskriftum. aðgerðir með Start, Process og End blokkum.

Að búa til .NET og COM hluti (New-Object)

Það eru margir hugbúnaðaríhlutir með .NET Core og COM viðmót sem nýtast kerfisstjórum vel. Með því að nota System.Diagnostics.EventLog flokkinn geturðu stjórnað kerfisskrám beint frá Windows PowerShell. Við skulum skoða dæmi um að búa til tilvik af þessum flokki með því að nota New-Object cmdlet með færibreytunni -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Þar sem við tilgreindum ekki sérstaka atburðaskrá inniheldur tilvikið sem myndast af bekknum engin gögn. Til að breyta þessu þarftu að kalla á sérstaka byggingaraðferð við stofnun hennar með því að nota -ArgumentList færibreytuna. Ef við viljum fá aðgang að forritaskránni ættum við að senda strenginn "Application" sem rök til byggingaraðilans:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Vinsamlegast athugaðu að við vistum úttak skipunarinnar í $AppLog breytunni. Þrátt fyrir að leiðslur séu almennt notaðar í gagnvirkum ham, krefst ritun forskrifta oft að viðhalda tilvísun í hlut. Að auki eru kjarna .NET Core flokkarnir í kerfisnafnarýminu: PowerShell leitar sjálfgefið að tilteknum gerðum í því, þannig að ritun Diagnostics.EventLog í stað System.Diagnostics.EventLog er alveg rétt.

Til að vinna með annálinn geturðu notað viðeigandi aðferðir:

$AppLog | Get-Member -MemberType Method

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Segjum að það sé hreinsað með Clear() aðferðinni ef það eru aðgangsréttindi:

$AppLog.Clear()

New-Object cmdlet er einnig notað til að vinna með COM hluti. Þeir eru talsvert margir - allt frá bókasöfnum sem fylgja með Windows forskriftaþjóninum til ActiveX forrita, eins og Internet Explorer. Til að búa til COM hlut þarftu að stilla -ComObject færibreytuna með forritunarfræðilegu ProgId viðkomandi flokks:

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

Til að búa til þína eigin hluti með handahófskenndri uppbyggingu virðist notkun New-Object of fornaldarleg og fyrirferðarmikil; þetta cmdlet er notað til að vinna með hugbúnaðarhlutum utan við PowerShell. Í næstu greinum verður fjallað nánar um þetta mál. Til viðbótar við .NET og COM hluti, munum við einnig kanna CIM (WMI) og ADSI hluti.

Að hringja í Static Methods

Ekki er hægt að stofna suma .NET Core flokka, þar á meðal System.Environment og System.Math. Þeir eru kyrrstöðu og innihalda aðeins fasta eiginleika og aðferðir. Þetta eru í meginatriðum tilvísunarsöfn sem eru notuð án þess að búa til hluti. Þú getur vísað til kyrrstöðuflokks í gegnum bókstaf með því að setja tegundarheitið innan hornklofa. Hins vegar, ef við skoðum uppbyggingu hlutarins með því að nota Get-Member, munum við sjá tegundina System.RuntimeType í stað System.Environment:

[System.Environment] | Get-Member

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Til að skoða aðeins kyrrstæða meðlimi skaltu hringja í Get-Member með færibreytunni -Static (athugaðu hlutgerðina):

[System.Environment] | Get-Member -Static

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Til að fá aðgang að kyrrstæðum eiginleikum og aðferðum, notaðu tvo samfellda tvípunkta í stað punkts á eftir bókstafnum:

[System.Environment]::OSVersion

Eða

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Sláðu inn PSCustomObject

Meðal fjölmargra gagnategunda sem til eru í PowerShell er vert að nefna PSCustomObject, hannað til að geyma hluti með handahófskenndri uppbyggingu. Að búa til slíkan hlut með því að nota New-Object cmdlet er talin klassísk, en fyrirferðarmikil og úrelt leið:

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

Við skulum skoða uppbyggingu hlutarins:

$object | Get-Member

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Frá og með PowerShell 3.0 er önnur setningafræði fáanleg:

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

Þú getur nálgast gögnin á einum af jafngildum leiðum:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Hér er dæmi um að breyta núverandi hashable í hlut:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Einn af ókostunum við hluti af þessari gerð er að röð eiginleika þeirra getur breyst. Til að forðast þetta verður þú að nota [pantað] eigindina:

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

Það eru aðrir möguleikar til að búa til hlut: hér að ofan skoðuðum við að nota cmdlet Veldu hlut. Allt sem er eftir er að finna út að bæta við og fjarlægja þætti. Að gera þetta fyrir hlutinn úr fyrra dæminu er frekar einfalt:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Add-Member cmdlet gerir þér kleift að bæta ekki aðeins eiginleikum, heldur einnig aðferðum við áður búið $hlut með því að nota "-MemberType ScriptMethod" smíðina:

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

Vinsamlegast athugaðu að við notuðum $ScriptBlock breytuna af gerðinni ScriptBlock til að geyma kóðann fyrir nýju aðferðina.

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Til að fjarlægja eiginleika skaltu nota samsvarandi aðferð:

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

Búðu til þína eigin flokka

PowerShell 5.0 kynnti hæfileikann til að skilgreina Flokkar nota setningafræði sem einkennir hlutbundin forritunarmál. Þjónustuorðið Class er ætlað fyrir þetta, eftir það ættir þú að tilgreina heiti flokksins og lýsa meginmáli hans innan sviga:

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

Þetta er sönn .NET Core gerð, með meginmáli sem lýsir eiginleikum þess, aðferðum og öðrum þáttum. Við skulum skoða dæmi um að skilgreina einfaldasta flokkinn:

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

Til að búa til hlut (flokkatilvik), notaðu cmdlet Nýr-hlutur, eða bókstaf af gerðinni [MyClass] og gervistöðvunaraðferð nýr (sjálfgefinn smiður):

$object = New-Object -TypeName MyClass

eða

$object = [MyClass]::new()

Við skulum greina uppbyggingu hlutarins:

$object | Get-Member

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Ekki gleyma umfangi: þú getur ekki vísað til tegundarheiti sem strengs eða notað tegund bókstafs utan handritsins eða einingarinnar sem flokkurinn er skilgreindur í. Í þessu tilviki geta aðgerðir skilað bekkjartilvikum (hlutum) sem verða aðgengilegar utan einingarinnar eða skriftunnar.

Eftir að þú hefur búið til hlutinn skaltu fylla út eiginleika hans:

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

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Athugaðu að flokkalýsingin tilgreinir ekki aðeins eiginleikana heldur einnig sjálfgefin gildi þeirra:

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

Lýsing flokksaðferðar líkist lýsingu á falli, en án þess að nota fallorðið. Eins og í falli eru færibreytur sendar til aðferða ef þörf krefur:

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

Nú getur fulltrúi bekkjarins okkar brosað:

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

Aðferðir geta verið ofhlaðnar; auk þess hefur flokkur statískir eiginleikar og aðferðir, sem og smiðir sem nöfn þeirra falla saman við nafn flokksins sjálfs. Bekkur sem er skilgreindur í handriti eða PowerShell mát getur þjónað sem grunnur fyrir annan - svona er arfleifð útfærð. Í þessu tilviki er leyfilegt að nota núverandi .NET flokka sem grunnflokka:

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

Lýsing okkar á því að vinna með hluti í PowerShell er varla tæmandi. Í eftirfarandi ritum munum við reyna að dýpka það með hagnýtum dæmum: Fimmta greinin í röðinni verður helguð málum við að samþætta PowerShell við hugbúnaðarhluta þriðja aðila. Fyrri hluta má finna á tenglunum hér að neðan.

Hluti 1: Grunneiginleikar Windows PowerShell
Hluti 2: Kynning á Windows PowerShell forritunarmálinu
Hluti 3: að senda færibreytur í forskriftir og aðgerðir, búa til cmdlets

Hvað er Windows PowerShell og til hvers er það notað? 4. hluti: Vinna með hluti, eigin flokkar

Heimild: www.habr.com

Bæta við athugasemd