O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

O le fa'asologa o tusitusiga o fa'atonuga i le fa'amalama fa'aliliuga a le PowerShell ua na'o se auala e fa'aali ai fa'amatalaga i se fomu e talafeagai mo le va'aiga a le tagata. O le mea moni o le Aso Lulu fa'atatau e galue ma mea faitino: cmdlets ma galuega tauave e maua i latou e fai ma mea fa'aoga ma toe foi mai i le faitotoa, ma o ituaiga fesuiaiga o loʻo avanoa faʻatasi ma tusitusiga e faʻavae i luga o vasega .NET. I le mataupu lona fa o le faasologa, o le a tatou suʻesuʻeina le galue i mea faitino i nisi auiliiliga.

TAGATA:

Meafaitino i le PowerShell
Va'aiga i le fausaga o mea faitino
Fa'amama mea
Fa'avasega mea
Filifilia o mea faitino ma o latou vaega
Mo Ta'itasi-Fa'atatau, Vaega-Fa'atatau ma Fua-Fa'atatau
Fausia .NET ma COM meafaitino (Fou-meamea)
Vala'au auala static
Ituaiga PSCustomObject
Fausia Au Lava Vasega

Meafaitino i le PowerShell

Sei o tatou manatua o se mea faitino o se aoina o faʻamaumauga o faʻamaumauga (meatotonu, mea tutupu, ma isi) ma metotia mo le faʻaogaina (auala). O lona fausaga o loʻo faʻamaonia e se ituaiga, lea e masani ona faʻavae i luga o vasega o loʻo faʻaaogaina i le faʻavae tuʻufaʻatasia .NET Core. E mafai foi ona galulue faatasi ma mea COM, CIM (WMI) ma ADSI. O mea totino ma metotia e manaʻomia e faʻatino ai gaioiga eseese i luga o faʻamaumauga; faʻaopoopo, i le PowerShell, e mafai ona pasia mea e fai ma finauga i galuega ma cmdlets, tuʻuina atu o latou tau i fesuiaiga, ma e iai foʻi faiga fa'atonu (fa'asalalau po'o le paipa). O fa'atonuga ta'itasi i totonu o le paipa e pasi atu ana galuega i le isi fa'asologa, mea ma mea. Mo le gaosiga, e mafai ona e faʻaogaina cmdlets tuʻufaʻatasia pe fai sau oe lava tulaga maualugae faʻatino faʻataʻitaʻiga eseese ma mea i totonu o le paipa: faʻavasegaina, faʻavasegaina, faʻavasegaina, ma e oʻo lava i le suia o latou fausaga. O le faʻaliliuina o faʻamatalaga i lenei fomu e i ai se tulaga sili ona lelei: e le manaʻomia e le 'au e mauaina ona faʻasalalau le tafe o bytes (tusitusi), o faʻamatalaga talafeagai uma e faigofie ona maua e ala i le valaʻau i mea talafeagai ma metotia.

Va'aiga i le fausaga o mea faitino

Mo se faʻataʻitaʻiga, seʻi o tatou faʻataʻitaʻiina le Get-Process cmdlet, lea e mafai ai ona e mauaina faʻamatalaga e uiga i faʻagasologa o loʻo faʻaogaina i totonu o le polokalama:

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

O le a fa'aalia nisi fa'amaumauga o tusitusiga e le maua ai se manatu e uiga i meatotino o mea na toe fa'afo'i mai ma a latou metotia. Ina ia faʻalelei le gaioiga, e tatau ona tatou aʻoaʻoina pe faʻapefea ona suʻesuʻeina le fausaga o mea faitino, ma o le Get-Member cmdlet o le a fesoasoani ia i tatou i lenei mea:

Get-Process | Get-Member

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

O iinei ua uma ona tatou vaʻavaʻai i le ituaiga ma le fausaga, ma faʻatasi ai ma le fesoasoani o faʻaopoopoga faʻaopoopo e mafai, mo se faʻataʻitaʻiga, faʻaalia naʻo meatotino o le mea o loʻo aofia ai i totonu:

Get-Process | Get-Member -MemberType Property

O lenei malamalama o le a manaʻomia e foia ai faʻafitauli tau pulega i fesoʻotaʻiga poʻo le tusia o au lava tusitusiga: mo se faʻataʻitaʻiga, e maua ai faʻamatalaga e uiga i faiga faʻapipiʻi e faʻaaoga ai le Responding property.

Fa'amama mea

E fa'atagaina e le PowerShell mea e fetaui ma se tu'utu'uga fa'apitoa e pasia i se paipa:

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

Ole fa'ai'uga ole fa'atinoina ole poloka mau i totonu ole puipui e tatau ona avea ma tau ole boolean. Afai e moni ($ moni), o le mea o loʻo tuʻuina atu i le Where-Object cmdlet o le a pasia i luga o le paipa, a leai ($ sese) o le a tapeina. Mo se faʻataʻitaʻiga, seʻi o tatou faʻaalia se lisi o auaunaga a le Windows Server ua taofia, i.e. i latou o lo'o fa'atulagaina meatotino a le Tulaga i le "Taofi":

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

O iinei tatou te toe vaʻai ai i se faʻamatalaga tusitusia, ae afai e te manaʻo e malamalama i le ituaiga ma totonu o le fausaga o mea e ui atu i le paipa e le faigata:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Fa'avasega mea

Pe a fa'agaioi laina paipa o mea, e masani ona mana'omia le fa'avasegaina. O le Sort-Object cmdlet e pasi atu i igoa o meatotino (faavasega ki) ma toe faafoi mea na fa'atonu e latou tau. E faigofie ona fa'avasega le gaioiga o faiga fa'agasolo e ala ile CPU taimi fa'aalu (cpu property):

Get-Process | Sort-Object –Property cpu

O le -Property parameter e mafai ona aveese pe a valaʻau i le Sort-Object cmdlet; e faʻaaogaina e le mafai. Mo le fa'asologa fa'asolosolo, fa'aaoga le -Descending parakalafa:

Get-Process | Sort-Object cpu -Descending

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Filifilia o mea faitino ma o latou vaega

O le Select-Object cmdlet e mafai ai e oe ona filifili se numera patino o mea i le amataga poʻo le faʻaiʻuga o se paipa e faʻaaoga ai le -First or -Last parameters. Faatasi ai ma lana fesoasoani, e mafai ona e filifilia mea taʻitasi poʻo nisi mea totino, ma faia foi ni mea fou e faʻavae i luga. Se'i o tatou va'ai pe fa'apefea ona galue le cmdlet e fa'aaoga ai fa'ata'ita'iga faigofie.

O le faʻatonuga o loʻo i lalo o loʻo faʻaalia ai faʻamatalaga e uiga i le 10 faiga e faʻaaogaina ai le maualuga o le RAM (WS meatotino):

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

E mafai ona e filifilia naʻo nisi o mea totino o mea e ui atu i le paipa ma faia ni mea fou e faʻavae i luga:

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

O se taunuuga o le faʻaogaina o le paipa, o le a matou mauaina se mea fou, o lona fausaga o le a ese mai le fausaga na toe faʻafoʻi mai e le Get-Process cmdlet. Sei o tatou faʻamaonia lenei mea e faʻaaoga ai le Get-Member:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Manatua o Select-Object toe faʻafoʻi se mea e tasi (-Muamua 1) e naʻo le lua o fanua na matou faʻamaonia: o latou tau na kopiina mai le mea muamua na pasi atu i le paipa e le Get-Process cmdlet. O se tasi o auala e fai ai mea i le PowerShell scripts e faʻavae i luga o le faʻaaogaina o Filifiliga-mea:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

I le faʻaaogaina o le Select-Object, e mafai ona e faʻaopoopoina meatotino faʻatusatusa i mea faitino e manaʻomia ona faʻatusalia laulau saisai. I lenei tulaga, o le tau o lona ki muamua e fetaui ma le igoa o meatotino, ma le tau o le ki lona lua e fetaui ma le tau o meatotino mo le elemene paipa o loʻo iai nei:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Sei o tatou tilotilo i le fausaga o mea e ui atu i le conveyor:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Mo Ta'itasi-Fa'atatau, Vaega-Fa'atatau ma Fua-Fa'atatau

E iai isi cmdlets mo le galue i mea faitino. Mo se faʻataʻitaʻiga, seʻi o tatou talanoa e uiga i le tolu sili ona aoga:

Mo-Ia-Autu fa'atagaina oe e fa'atautaia le PowerShell code mo mea ta'itasi i le paipa:

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

Vaega-mea fa'avasega mea i le tau o meatotino:

Group-Object PropertyName

Afai e te taʻavale i le -NoElement parameter, e mafai ona e suʻeina le numera o elemene i vaega.

Fua-mea faʻaputuina faʻasalalauga faʻasalalauga eseese e ala i mea taua o fanua i le paipa (faʻatatau le aofaʻi, ma maua ai foi le tau maualalo, maualuga poʻo le averesi):

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

E masani lava, o le cmdlets o loʻo talanoaina e faʻaoga faʻatasi, ma e masani ona faia i tusitusiga. galuega tauave fa'atasi ai ma poloka Amata, Fa'agasologa ma Fa'ai'u.

Fausia .NET ma COM meafaitino (Fou-meamea)

E tele vaega fa'akomepiuta fa'atasi ai ma feso'ota'iga .NET Core ma COM e aoga i fa'atonu fa'atonu. I le fa'aaogaina o le System.Diagnostics.EventLog vasega, e mafai ona e fa'atautaia sa'o fa'amaumauga mai le Windows PowerShell. Sei o tatou tilotilo i se faʻataʻitaʻiga o le fatuina o se faʻataʻitaʻiga o lenei vasega e faʻaaoga ai le New-Object cmdlet ma le -TypeName parameter:

New-Object -TypeName System.Diagnostics.EventLog

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Talu ai matou te leʻi faʻamaonia se faʻamaumauga faʻapitoa, o le faʻataʻitaʻiga o le vasega e leai ni faʻamatalaga. Ina ia suia lenei mea, e tatau ona e valaʻau se auala faufale faʻapitoa i le taimi o lona fausiaina e faʻaaoga ai le -ArgumentList parakalafa. Afai tatou te fia maua le tusi talosaga, e tatau ona tatou pasia le manoa "Talosaga" e fai ma finauga i le faufale:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Faamolemole ia matau na matou faasaoina le gaioiga o le poloaiga i le $AppLog fesuiaiga. E ui lava e masani ona faʻaogaina laina paipa i le faʻaogaina o fesoʻotaʻiga, o le tusiaina o tusitusiga e masani ona manaʻomia le tausia o se faʻamatalaga i se mea. E le gata i lea, o vasega autu .NET Core o loʻo i totonu o le System namespace: PowerShell e le mafai ona suʻeina ituaiga faʻapitoa i totonu, o lea e saʻo ai le tusia o Diagnostics.EventLog nai lo System.Diagnostics.EventLog.

Ina ia galue ma le ogalaau, e mafai ona e faʻaogaina metotia talafeagai:

$AppLog | Get-Member -MemberType Method

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Seʻi tatou fai atu e faʻamalo e le Clear() auala pe a iai ni aia tatau:

$AppLog.Clear()

O le New-Object cmdlet o loʻo faʻaaogaina foi e galulue ai ma vaega COM. E tele naua - mai faletusi o loʻo tuʻuina atu i le Windows script server i ActiveX applications, pei ole Internet Explorer. Ina ia fatuina se mea COM, e tatau ona e setiina le -ComObject parakalafa ma le polokalame ProgId o le vasega manaʻomia:

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

Ina ia fai au lava meafaitino ma se fausaga faʻapitoa, o le faʻaaogaina o le New-Object e foliga faʻapitoa ma faʻalavelave; o lenei cmdlet e faʻaaogaina e galue ai ma mea faʻapipiʻi i fafo atu o le PowerShell. I tala o lumana'i o le a talanoaina atili ai lenei mataupu. I le faaopoopo atu i mea faitino .NET ma COM, o le a matou suʻesuʻeina foi mea CIM (WMI) ma ADSI.

Vala'au auala static

O nisi vasega .NET Core e le mafai ona fa'atonuina, e aofia ai System.Environment ma System.Math. O latou na tumau ma o lo'o i ai na'o meatotino ma metotia. O faletusi fa'asino tonu ia e fa'aoga e aunoa ma le faia o mea. E mafai ona e va'ai i se vasega fa'ata'atia e ala i se fa'aupuga e ala i le fa'apipi'iina o le igoa ituaiga i puipui sikuea. Ae peitaʻi, afai tatou te vaʻavaʻai i le fausaga o le mea e faʻaaoga ai Get-Member, o le a tatou vaʻai i le ituaiga System.RuntimeType nai lo System.Environment:

[System.Environment] | Get-Member

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Ina ia vaʻai naʻo tagata faʻapitoa, valaʻau Get-Member ma le -Static parameter (matau le ituaiga mea):

[System.Environment] | Get-Member -Static

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Ina ia maua mea fa'apitoa ma metotia, fa'aoga lua koluma soso'o nai lo se vaitau pe a mae'a le mea moni:

[System.Environment]::OSVersion

Pe

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Ituaiga PSCustomObject

Faatasi ai ma le tele o faʻamaumauga o loʻo maua i le PowerShell, e taua le taʻua o le PSCustomObject, ua fuafuaina mo le teuina o mea ma se fausaga faʻapitoa. O le fatuina o sea mea e faʻaaoga ai le New-Object cmdlet ua manatu o se auala masani, ae faigata ma tuai:

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

Sei o tatou tilotilo i le fausaga o le mea:

$object | Get-Member

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Amata ile PowerShell 3.0, o loʻo maua se isi faʻasologa:

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

E mafai ona e mauaina faʻamatalaga i se tasi o auala tutusa:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

O se fa'ata'ita'iga lea o le fa'aliliuina o se hashtable o iai i se mea:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

O se tasi o tulaga le lelei o mea faitino o lenei ituaiga o le faasologa o latou meatotino e mafai ona suia. Ina ia aloese mai lenei mea, e tatau ona e faʻaogaina le uiga [faʻatonu]:

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

E i ai isi filifiliga mo le fatuina o se mea: i luga na matou tilotilo i le faʻaaogaina o le cmdlet Filifili-Sini. Pau lava le mea o loʻo totoe o le suʻeina lea o le faʻaopoopo ma le aveeseina o elemene. O le faia o lenei mea mo le mea mai le faʻataʻitaʻiga muamua e faigofie lava:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

O le Add-Member cmdlet e mafai ai ona e faʻaopoopoina e le gata o meatotino, ae faʻapea foʻi auala i se $ mea na faia muamua e ala i le faʻaogaina o le "-MemberType ScriptMethod" fau:

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

Fa'amolemole na matou fa'aogaina le $ScriptBlock fesuiaiga o le ituaiga ScriptBlock e teu ai le code mo le auala fou.

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Ina ia aveese meatotino, faʻaaoga le auala talafeagai:

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

Fausia Au Lava Vasega

O le PowerShell 5.0 na faʻaalia le tomai e faʻamatala ai vasega fa'aogaina uiga fa'aupuga o gagana fa'atulagaina mea. O le upu tautua Vasega ua faʻamoemoeina mo lenei mea, a maeʻa e tatau ona e faʻamaonia le igoa o le vasega ma faʻamatala lona tino i totonu o puipui puipui:

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

Ole ituaiga moni .NET Core lea, ma se tino e faʻamatalaina ana meatotino, metotia, ma isi elemene. Sei o tatou tilotilo i se faʻataʻitaʻiga o le faʻamalamalamaina o le vasega sili ona faigofie:

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

Ina ia fatuina se mea (vasega faʻataʻitaʻiga), faʻaaoga le cmdlet Mea Fou, po'o se ituaiga moni [MyClass] ma auala pseudostatic fou (fausiaina faufale):

$object = New-Object -TypeName MyClass

poʻo

$object = [MyClass]::new()

Sei o tatou iloiloina le fausaga o le mea:

$object | Get-Member

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Aua nei galo e uiga i le lautele: e le mafai ona e faasino i se igoa ituaiga o se manoa poʻo le faʻaogaina o se ituaiga moni i fafo atu o le tusitusiga poʻo le module o loʻo faʻamatalaina ai le vasega. I le tulaga lea, e mafai e galuega faatino ona toe faafoi vasega vasega (meafaitino) e mafai ona maua i fafo atu o le module poʻo le tusitusiga.

A maeʻa ona fatuina le mea, faʻatumu ona meatotino:

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

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

Manatua o le faʻamatalaga o le vasega o loʻo faʻamaoti mai ai e le gata i ituaiga meatotino, ae faʻapea foʻi a latou tau faʻaletonu:

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

O le faʻamatalaga o se vasega auala e foliga tutusa ma le faʻamatalaga o se galuega, ae aunoa ma le faʻaaogaina o le upu galue. E pei o se galuega, e tuʻuina atu tapulaʻa i metotia pe a manaʻomia:

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

Ua mafai nei ona ataata le sui o le matou vasega:

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

Metotia e mafai ona sili atu le mamafa; e le gata i lea, o se vasega e iai meatotino tumau ma metotia, faʻapea foʻi ma tagata faufale o latou igoa e fetaui ma le igoa o le vasega lava ia. O se vasega ua fa'amatalaina i totonu o se tusitusiga po'o le PowerShell module e mafai ona avea ma fa'avae mo se isi - o le auala lea e fa'atino ai le tofi. I lenei tulaga, e fa'atagaina le fa'aogaina o vasega .NET o lo'o iai nei e fai ma fa'avae:

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

O la matou faʻamatalaga o le galue ma mea i le PowerShell e leʻi maeʻa. I faʻasalalauga o loʻo mulimuli mai, o le a matou taumafai e faʻalolotoina ma faʻataʻitaʻiga aoga: o le lima o mataupu i le faasologa o le a tuʻuina atu i mataupu o le tuʻufaʻatasia o le PowerShell faʻatasi ai ma vaega faʻapitoa polokalame. O vaega ua mavae e mafai ona maua i so'oga i lalo.

Vaega 1: Autu Windows PowerShell Features
Vaega 2: Folasaga ile Windows PowerShell Programming Language
Vaega 3: pasi fa'amaufa'ailoga i tusitusiga ma galuega, fatuina cmdlets

O le a le Windows PowerShell ma o le a le mea e fa'aoga ai? Vaega 4: Galulue ma mea faitino, lava vasega

puna: www.habr.com

Faaopoopo i ai se faamatalaga