Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Níl in aschur téacs na n-orduithe i bhfuinneog ateangaire PowerShell ach bealach chun faisnéis a thaispeáint i bhfoirm atá oiriúnach don dearcadh daonna. I ndáiríre Dé Céadaoin dírithe a bheith ag obair le rudaí: faigheann cmdlets agus feidhmeanna iad mar ionchur agus ar ais ag an slí amach, agus tá na cineálacha athraitheacha atá ar fáil go hidirghníomhach agus i scripteanna bunaithe ar ranganna .NET. Sa cheathrú alt den tsraith, déanfaimid staidéar níos mine ar oibriú le réada.

Suil:

Réada i PowerShell
Breathnú ar struchtúr rudaí
Rudaí a scagadh
Rudaí a shórtáil
Roghnú rudaí agus a bpáirteanna
ForEach-Réad, Grúpa-Réad agus Beart-Réad
réada .NET agus COM a chruthú (Réad Nua)
Modhanna Statach a ghlaoch
Cineál PSCustomObject
Do Ranganna Féin á Chruthú

Réada i PowerShell

Meabhraímid gur bailiúchán de réimsí sonraí (airíonna, imeachtaí, etc.) agus modhanna chun iad a phróiseáil (modhanna) é réad. Tá a struchtúr sonraithe de réir cineáil, atá bunaithe de ghnáth ar ranganna a úsáidtear san ardán aontaithe .NET Core. Is féidir oibriú le réada COM, CIM (WMI) agus ADSI freisin. Tá gá le hairíonna agus modhanna chun gníomhartha éagsúla a dhéanamh ar shonraí; ina theannta sin, i PowerShell, is féidir rudaí a chur ar aghaidh mar argóintí chuig feidhmeanna agus cmdlets, a luachanna a shannadh d'athróga, agus tá meicníocht comhdhéanamh ordaithe (seoltóir nó píblíne). Gabhann gach ordú sa phíblíne a haschur chuig an gcéad cheann eile ar a seal, réad ar réad. Le haghaidh próiseála, is féidir leat cmdlets tiomsaithe a úsáid nó do chuid féin a chruthú gnéithe castaionramhálacha éagsúla a dhéanamh le rudaí atá ar an bpíblíne: scagadh, sórtáil, grúpáil, agus fiú a struchtúr a athrú. Tá buntáiste tromchúiseach ag baint le sonraí a tharchur san fhoirm seo: ní gá don fhoireann glactha an sruth beart (téacs) a pharsáil, is furasta an fhaisnéis riachtanach go léir a aisghabháil trí na hairíonna agus na modhanna cuí a ghlaoch.

Breathnú ar struchtúr rudaí

Mar shampla, déanaimis an cmdlet Get-Process a rith, a ligeann duit faisnéis a fháil faoi na próisis a ritheann sa chóras:

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Taispeánfaidh sé roinnt sonraí téacs formáidithe nach dtugann aon smaoineamh faoi airíonna na n-ábhar a cuireadh ar ais agus a modhanna. Chun an t-aschur a mhionchoigeartú, ní mór dúinn foghlaim conas struchtúr rudaí a scrúdú, agus cabhróidh an cmdlet Get-Member linn leis seo:

Get-Process | Get-Member

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Anseo feicimid an cineál agus an struchtúr cheana féin, agus le cabhair ó pharaiméadair bhreise is féidir linn, mar shampla, airíonna an ruda atá san áireamh san ionchur a thaispeáint:

Get-Process | Get-Member -MemberType Property

Beidh an t-eolas seo ag teastáil chun fadhbanna riaracháin a réiteach go hidirghníomhach nó chun do chuid scripteanna féin a scríobh: mar shampla, chun faisnéis a fháil faoi phróisis crochta ag baint úsáide as an airí Responding.

Rudaí a scagadh

Ligeann PowerShell rudaí a chomhlíonann coinníoll áirithe a chur trí phíblíne:

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

Caithfidh luach booleach a bheith mar thoradh ar an mbloc scripte a chur i gcrích laistigh de na lúibíní. Más fíor é ($true), cuirfear an réad a chuirtear isteach sa cmdlet Where-Object ar aghaidh feadh na píblíne, nó ($false) scriosfar é. Mar shampla, taispeánfaimid liosta de na seirbhísí Windows Server atá stoptha, i.e. iad siúd a bhfuil a gcuid maoine “Stoptha” socraithe:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Anseo arís feicimid léiriú téacsúil, ach más mian leat cineál agus struchtúr inmheánach na n-ábhar a théann tríd an bpíblíne a thuiscint, níl sé deacair:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Rudaí a shórtáil

Nuair a bhíonn rudaí á bpróiseáil píblíne, is minic is gá iad a shórtáil. Cuirtear ainmneacha na n-airíonna (eochracha sórtála) ar aghaidh sa cmdlet Sort-Object agus seolann sé rudaí a ordaítear de réir a luachanna ar ais. Tá sé éasca aschur na bpróiseas reatha a shórtáil de réir an ama a chaitear ag LAP (airí an cpu):

Get-Process | Sort-Object –Property cpu

Is féidir an paraiméadar -Property a fhágáil ar lár nuair a ghlaonn tú ar an cmdlet Sort-Object; úsáidtear é de réir réamhshocraithe. Le haghaidh sórtáil droim ar ais, bain úsáid as an paraiméadar -Descending:

Get-Process | Sort-Object cpu -Descending

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Roghnú rudaí agus a bpáirteanna

Ceadaíonn an cmdlet Select-Object duit líon sonrach rudaí a roghnú ag tús nó ag deireadh píblíne ag baint úsáide as na paraiméadair -First or -Last. Le cabhair uaidh, is féidir leat rudaí aonair nó airíonna áirithe a roghnú, agus rudaí nua a chruthú bunaithe orthu freisin. Breathnaímid ar conas a oibríonn an cmdlet ag baint úsáide as samplaí simplí.

Taispeánann an t-ordú seo a leanas faisnéis faoi na 10 bpróiseas a ídíonn an t-uasmhéid RAM (airí WS):

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Ní féidir leat ach airíonna áirithe rudaí a théann tríd an bpíblíne a roghnú agus cinn nua a chruthú bunaithe orthu:

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

Mar thoradh ar oibriú na píblíne, gheobhaidh muid rud nua, a mbeidh a struchtúr difriúil leis an struchtúr ar ais ag an cmdlet Get-Process. Déanaimis é seo a fhíorú le Get-Member:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Tabhair faoi deara go dtugann Select-Object réad amháin (-First 1) ar ais nach bhfuil ach dhá cheann de na réimsí a shonraigh muid: cóipeáladh a luachanna ón gcéad réad a cuireadh isteach sa phíblíne ag an cmdlet Get-Process. Tá ceann de na bealaí chun rudaí a chruthú i scripteanna PowerShell bunaithe ar Roghnaigh-Object a úsáid:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Ag baint úsáide as Roghnaigh-Réad, is féidir leat airíonna ríofa a chur le rudaí nach mór a léiriú mar táblaí hash. Sa chás seo, comhfhreagraíonn luach a chéad eochair don ainm maoine, agus comhfhreagraíonn luach an dara eochair don luach maoine don eilimint píblíne reatha:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Breathnaímid ar struchtúr rudaí a théann tríd an iompair:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

ForEach-Réad, Grúpa-Réad agus Beart-Réad

Tá cmdlets eile ann chun oibriú le rudaí. Mar shampla, déanaimis labhairt faoi na trí cinn is úsáidí:

ForEach-Cuspóir ligeann sé duit cód PowerShell a rith le haghaidh gach réad sa phíblíne:

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

Grúpa-Réad rudaí a ghrúpáil de réir luach maoine:

Group-Object PropertyName

Má ritheann tú é leis an bparaiméadar -NoElement, is féidir leat líon na n-eilimintí sna grúpaí a fháil amach.

Beart-Réad comhiomlánaíonn sé paraiméadair achoimre éagsúla de réir luachanna oibiachta réimse sa phíblíne (ríomhann sé an tsuim, agus faigheann sé freisin an t-íosluach, an t-uasluach nó an meánluach):

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

Go hiondúil, úsáidtear na cmdlets a phléitear go hidirghníomhach, agus is minic a chruthaítear iad i scripteanna. feidhmeanna le bloic Tosaigh, Próisis agus Deireadh.

réada .NET agus COM a chruthú (Réad Nua)

Tá go leor comhpháirteanna bogearraí le comhéadain .NET Core agus COM atá úsáideach do riarthóirí córais. Ag baint úsáide as an rang System.Diagnostics.EventLog, is féidir leat logaí córais a bhainistiú go díreach ó Windows PowerShell. Breathnaímid ar shampla de shampla den aicme seo a chruthú ag baint úsáide as an cmdlet New-Object leis an bparaiméadar -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Ós rud é nár shonraigh muid loga teagmhais ar leith, níl aon sonraí ar an gcás mar thoradh ar an rang. Chun é seo a athrú, ní mór duit modh cruthaitheoir speisialta a ghlaoch le linn é a chruthú ag baint úsáide as an bparaiméadar -ArgumentList. Más mian linn logáil an fheidhmchláir a rochtain, ba cheart dúinn an teaghrán "Iarratas" a chur ar aghaidh mar argóint don chruthaitheoir:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Tabhair faoi deara gur shábháíomar aschur an ordaithe san athróg $AppLog. Cé go n-úsáidtear píblínte go coitianta i mód idirghníomhach, is minic go mbíonn gá le tagairt do réad a scríobh scripteanna a scríobh. Ina theannta sin, tá na croí-ranganna .NET Core san ainmspás an Chórais: féachann PowerShell de réir réamhshocraithe do chineálacha sonraithe ann, mar sin tá scríobh Diagnostics.EventLog in ionad System.Diagnostics.EventLog ceart go leor.

Chun oibriú leis an logáil, is féidir leat na modhanna cuí a úsáid:

$AppLog | Get-Member -MemberType Method

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Ligean le rá go bhfuil sé glanta leis an modh Clear() má tá cearta rochtana ann:

$AppLog.Clear()

Úsáidtear an cmdlet New-Object freisin chun oibriú le comhpháirteanna COM. Tá go leor acu ann - ó na leabharlanna a sholáthraítear leis an bhfreastalaí script Windows go feidhmchláir ActiveX, mar Internet Explorer. Chun réad COM a chruthú, ní mór duit an paraiméadar -ComObject a shocrú le ProgId ríomhchláraithe an aicme atá uait:

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

Chun do chuid réad féin a chruthú le struchtúr treallach, is cosúil go bhfuil úsáid á baint as New-Object ró-seansúla agus ró-chasta; úsáidtear an cmdlet seo chun oibriú le comhpháirteanna bogearraí lasmuigh de PowerShell. In altanna amach anseo déanfar an cheist seo a phlé níos mine. Chomh maith le réada .NET agus COM, déanfaimid iniúchadh freisin ar réada CIM (WMI) agus ADSI.

Modhanna Statach a ghlaoch

Ní féidir roinnt ranganna .NET Core a chur ar an toirt, lena n-áirítear System.Environment agus System.Math. Tá siad statach agus nach bhfuil iontu ach airíonna agus modhanna statacha. Go bunúsach is leabharlanna tagartha iad seo a úsáidtear gan réada a chruthú. Is féidir leat tagairt a dhéanamh d'aicme statach trí litir tríd an ainm cineáil a iamh idir lúibíní cearnacha. Mar sin féin, má táimid ar struchtúr an réad ag baint úsáide as Get-Member, feicfimid an cineál System.RuntimeType in ionad System.Environment:

[System.Environment] | Get-Member

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Chun féachaint ar bhaill statacha amháin, cuir glaoch ar Get-Member leis an bparaiméadar -Static (tabhair faoi deara an cineál oibiachta):

[System.Environment] | Get-Member -Static

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Chun airíonna agus modhanna statacha a rochtain, bain úsáid as dhá choilín as a chéile in ionad tréimhse tar éis an liteartha:

[System.Environment]::OSVersion

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Cineál PSCustomObject

I measc na gcineálacha iomadúla sonraí atá ar fáil i PowerShell, is fiú PSCustomObject a lua, atá deartha chun rudaí a stóráil le struchtúr treallach. Meastar gur bealach clasaiceach, ach achrannach agus as dáta é rud den sórt sin a chruthú leis an cmdlet New-Object:

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

Breathnaímid ar struchtúr an ruda:

$object | Get-Member

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Ag tosú le PowerShell 3.0, tá comhréir eile ar fáil:

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

Is féidir leat rochtain a fháil ar na sonraí ar cheann de na bealaí coibhéiseacha:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Seo sampla de hashtable atá ann cheana a thiontú go réad:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Ceann de na míbhuntáistí a bhaineann le rudaí den chineál seo ná gur féidir ord a n-airíonna a athrú. Chun é seo a sheachaint, ní mór duit an aitreabúid [ordaithe] a úsáid:

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

Tá roghanna eile ann chun réad a chruthú: thuas d'fhéachamar ar an cmdlet a úsáid Roghnaigh-Cuspóir. Níl fágtha ach eilimintí a shuimiú agus a bhaint. Is simplí go leor é seo a dhéanamh don réad ón sampla roimhe seo:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Ligeann an cmdlet Breiseáin duit ní hamháin airíonna, ach freisin modhanna a chur le $object a cruthaíodh roimhe seo trí úsáid a bhaint as an tógáil "-MemberType ScriptMethod":

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

Tabhair faoi deara gur úsáideamar an athróg $ScriptBlock den chineál ScriptBlock chun an cód don mhodh nua a stóráil.

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Chun airíonna a bhaint, bain úsáid as an modh comhfhreagrach:

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

Do Ranganna Féin á Chruthú

Thug PowerShell 5.0 isteach an cumas a shainiú gráid ag baint úsáide as comhréir saintréith de chuid teangacha ríomhchláraithe atá dírithe ar oibiachtaí. Tá an focal seirbhíse Aicme beartaithe dó seo, agus ina dhiaidh sin ba chóir duit ainm an ranga a shonrú agus cur síos a dhéanamh ar a chorp idir lúibíní oibreora:

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

Is cineál fíor .NET Core é seo, le comhlacht a chuireann síos ar a chuid airíonna, modhanna, agus eilimintí eile. Breathnaímid ar shampla den rang is simplí a shainiú:

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

Chun réad a chruthú (mar shampla ranga), úsáid an cmdlet Nua-Réad, nó litriúil de chineál [MyClass] agus modh pseudostatach nua (déantóir réamhshocraithe):

$object = New-Object -TypeName MyClass

$object = [MyClass]::new()

Déanaimis anailís ar struchtúr an ruda:

$object | Get-Member

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Ná déan dearmad faoin raon feidhme: ní féidir leat tagairt a dhéanamh d'ainm cineáil mar theaghrán nó cineál litriúil a úsáid lasmuigh den script nó den mhodúl ina bhfuil an rang sainithe. Sa chás seo, is féidir le feidhmeanna cásanna ranga (rudaí) a bheidh inrochtana lasmuigh den mhodúl nó den script a thabhairt ar ais.

Tar éis an réad a chruthú, líon isteach a chuid maoine:

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

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Tabhair faoi deara go sonraíonn an tuairisc ranga ní hamháin na cineálacha maoine, ach freisin a luachanna réamhshocraithe:

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

Tá an cur síos ar mhodh ranga cosúil leis an gcur síos ar fheidhm, ach gan an focal feidhme a úsáid. Mar is amhlaidh i bhfeidhm, cuirtear paraiméadair ar aghaidh chuig modhanna más gá:

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

Anois is féidir le hionadaí ár rang aoibh gháire:

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

Is féidir modhanna a ró-ualú; ina theannta sin, tá rang ag airíonna agus modhanna statacha, chomh maith le cruthaitheoirí a bhfuil a n-ainmneacha comhthráthach le hainm an ranga féin. Is féidir le haicme atá sainithe i script nó modúl PowerShell a bheith mar bhonn do dhuine eile - seo mar a chuirtear oidhreacht i bhfeidhm. Sa chás seo, tá sé ceadaithe ranganna .NET atá ann cheana a úsáid mar bhunranganna:

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

Is ar éigean go bhfuil ár gcur síos ar oibriú le réada in PowerShell uileghabhálach. Sna foilseacháin seo a leanas, déanfaimid iarracht é a dhoimhniú le samplaí praiticiúla: beidh an cúigiú alt sa tsraith dírithe ar na saincheisteanna a bhaineann le PowerShell a chomhtháthú le comhpháirteanna bogearraí tríú páirtí. Is féidir páirteanna san am atá caite a fháil ag na naisc thíos.

Cuid 1: Bunghnéithe Windows PowerShell
Cuid 2: Réamhrá don Teanga Ríomhchlárúcháin Windows PowerShell
Cuid 3: paraiméadair a rith chuig scripteanna agus feidhmeanna, ag cruthú cmdlets

Cad é Windows PowerShell agus cad chuige a n-úsáidtear é? Cuid 4: Ag obair le rudaí, a ranganna féin

Foinse: will.com

Add a comment