Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Pwodiksyon tèks kòmandman yo nan fenèt entèprèt PowerShell la se jis yon fason pou montre enfòmasyon nan yon fòm ki apwopriye pou pèsepsyon moun. Aktyèlman Mèkredi oryante pou travay ak objè: cmdlets ak fonksyon resevwa yo kòm opinyon ak retounen nan sòti a, ak kalite varyab ki disponib entèaktif ak nan scripts yo baze sou klas .NET. Nan katriyèm atik la nan seri a, nou pral etidye travay ak objè an plis detay.

Table of contents:

Objè nan PowerShell
Wè estrikti objè yo
Filtrage objè yo
Klase objè yo
Chwazi objè ak pati yo
PouChak-Objè, Gwoup-Objè ak Mezi-Objè
Kreye objè .NET ak COM (New-Object)
Rele metòd estatik
Tape PSCustomObject
Kreye pwòp klas ou yo

Objè nan PowerShell

Ann sonje ke yon objè se yon koleksyon jaden done (pwopriyete, evènman, elatriye) ak metòd pou trete yo (metòd). Estrikti li yo espesifye pa yon kalite, ki anjeneral baze sou klas yo itilize nan platfòm inifye .NET Nwayo a. Li posib tou pou travay avèk objè COM, CIM (WMI) ak ADSI. Pwopriyete ak metòd yo nesesè pou fè plizyè aksyon sou done; Anplis de sa, nan PowerShell, objè yo ka pase kòm agiman nan fonksyon ak cmdlets, asiyen valè yo nan varyab, epi gen tou. mekanis konpozisyon lòd (transporteur oswa tiyo). Chak kòmandman nan tiyo a pase pwodiksyon li nan pwochen an nan vire, objè pa objè. Pou pwosesis, ou ka itilize cmdlets konpile oswa kreye pwòp ou yo karakteristik avansefè manipilasyon divès kalite ak objè nan tiyo a: filtraj, klasman, gwoupman, e menm chanje estrikti yo. Transmèt done nan fòm sa a gen yon avantaj grav: ekip k ap resevwa a pa bezwen analize kouran byte (tèks), tout enfòmasyon ki nesesè yo fasil jwenn lè w rele pwopriyete ak metòd ki apwopriye yo.

Wè estrikti objè yo

Pou egzanp, ann kouri cmdlet Get-Process, ki pèmèt ou jwenn enfòmasyon sou pwosesis yo ap kouri nan sistèm nan:

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Li pral montre kèk done tèks fòma ki pa bay okenn lide sou pwopriyete yo nan objè yo retounen ak metòd yo. Pou ajiste pwodiksyon an, nou bezwen aprann kijan pou egzamine estrikti objè yo, epi cmdlet Get-Member la ap ede nou ak sa a:

Get-Process | Get-Member

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Isit la nou deja wè kalite a ak estrikti, epi avèk èd nan paramèt adisyonèl nou ka, pou egzanp, montre sèlman pwopriyete yo nan objè a ki enkli nan opinyon an:

Get-Process | Get-Member -MemberType Property

Konesans sa a pral nesesè pou rezoud pwoblèm administrasyon an entèaktif oswa pou ekri pwòp script ou yo: pou egzanp, jwenn enfòmasyon sou pwosesis kwoke lè l sèvi avèk pwopriyete Responding la.

Filtrage objè yo

PowerShell pèmèt objè ki satisfè yon sèten kondisyon yo dwe pase nan yon tiyo:

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

Rezilta egzekite blòk script la nan parantèz yo dwe yon valè booleyen. Si se vre ($ vre), objè a ki antre nan cmdlet Where-Object la pral pase sou tiyo a, otreman ($ fo) li pral efase. Pa egzanp, ann montre yon lis sèvis sèvè Windows ki sispann, i.e. moun ki gen pwopriyete Estati yo mete nan "Stopped":

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Isit la ankò nou wè yon reprezantasyon tèks, men si ou vle konprann kalite a ak estrikti entèn nan objè yo pase nan tiyo a li pa difisil:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Klase objè yo

Lè pwosesis tiyo nan objè, gen souvan yon bezwen sòt yo. Cmdlet Sort-Object la pase non pwopriyete yo (klas klasman) epi li retounen objè ki òdone dapre valè yo. Li fasil pou klase pwodiksyon an nan pwosesis kouri pa tan CPU pase (pwopriyete CPU):

Get-Process | Sort-Object –Property cpu

Ou ka omisyon paramèt -Property la lè w ap rele cmdlet Sort-Object; li itilize pa default. Pou klasman ranvèse, sèvi ak paramèt -Descending:

Get-Process | Sort-Object cpu -Descending

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Chwazi objè ak pati yo

Cmdlet Select-Object la pèmèt ou chwazi yon kantite espesifik objè nan kòmansman oswa nan fen yon tiyo lè l sèvi avèk paramèt -Premye oswa -Dènye. Avèk èd li, ou ka chwazi objè sèl oswa sèten pwopriyete, epi tou kreye nouvo objè ki baze sou yo. Ann gade ki jan cmdlet la ap travay lè l sèvi avèk egzanp senp.

Kòmandman sa a montre enfòmasyon sou 10 pwosesis ki konsome kantite maksimòm RAM (pwopriyete WS):

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Ou ka chwazi sèlman sèten pwopriyete objè ki pase nan tiyo a epi kreye lòt ki baze sou yo:

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

Kòm yon rezilta nan operasyon tiyo a, nou pral resevwa yon nouvo objè, estrikti nan ki pral diferan de estrikti a retounen nan Get-Process cmdlet la. Ann verifye sa a lè l sèvi avèk Get-Member:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Remake byen ke Select-Object retounen yon sèl objè (-First 1) ki gen sèlman de nan jaden nou espesifye: valè yo te kopye nan premye objè a pase nan tiyo a pa cmdlet Get-Process la. Youn nan fason yo kreye objè nan script PowerShell baze sou lè l sèvi avèk Select-Object:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Sèvi ak Chwazi-Objè, ou ka ajoute pwopriyete kalkile nan objè ki bezwen reprezante kòm tab hash. Nan ka sa a, valè premye kle li a koresponn ak non pwopriyete a, ak valè dezyèm kle a koresponn ak valè pwopriyete a pou eleman tiyo aktyèl la:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Ann gade nan estrikti a nan objè ki pase nan CONVEYOR la:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

PouChak-Objè, Gwoup-Objè ak Mezi-Objè

Gen lòt cmdlets pou travay ak objè yo. Kòm yon egzanp, ann pale sou twa ki pi itil yo:

Pou Chak-Objè pèmèt ou kouri kòd PowerShell pou chak objè nan tiyo a:

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

Gwoup-Objè gwoupe objè pa valè pwopriyete:

Group-Object PropertyName

Si ou kouri li ak paramèt -NoElement, ou ka jwenn kantite eleman nan gwoup yo.

Mezi-Objè rasanble divès paramèt rezime pa valè jaden objè nan tiyo a (kalkile sòm total la, epi tou li jwenn valè minimòm, maksimòm oswa mwayèn):

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

Tipikman, cmdlets yo diskite yo itilize entèaktif, epi yo souvan kreye nan scripts. fonksyon ak Blòk Kòmanse, Pwosesis ak Fen.

Kreye objè .NET ak COM (New-Object)

Genyen anpil konpozan lojisyèl ak .NET Core ak COM interfaces ki itil pou administratè sistèm yo. Sèvi ak klas System.Diagnostics.EventLog, ou ka jere mòso sistèm dirèkteman nan Windows PowerShell. Ann gade yon egzanp pou kreye yon egzanp nan klas sa a lè l sèvi avèk cmdlet New-Object ak paramèt -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Piske nou pa t espesifye yon jounal evènman espesifik, egzanp klas la ki lakòz pa gen okenn done. Pou chanje sa a, ou bezwen rele yon metòd konstrukteur espesyal pandan kreyasyon li lè l sèvi avèk paramèt -ArgumentList. Si nou vle jwenn aksè nan jounal aplikasyon an, nou ta dwe pase fisèl "Aplikasyon" kòm yon agiman bay konstrukteur a:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Tanpri sonje ke nou sove pwodiksyon lòd la nan varyab $AppLog la. Malgre ke tiyo yo souvan itilize nan mòd entèaktif, ekri script souvan mande pou kenbe yon referans a yon objè. Anplis de sa, klas nwayo .NET Core yo genyen nan espas non System la: PowerShell pa default gade pou kalite espesifye nan li, kidonk ekri Diagnostics.EventLog olye de System.Diagnostics.EventLog se byen kòrèk.

Pou travay ak boutèy la, ou ka itilize metòd ki apwopriye yo:

$AppLog | Get-Member -MemberType Method

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Ann di se metòd la Clear() otorize si gen dwa aksè:

$AppLog.Clear()

New-Object cmdlet yo itilize tou pou travay avèk konpozan COM. Gen anpil nan yo - soti nan bibliyotèk yo apwovizyone ak sèvè Windows script nan aplikasyon ActiveX, tankou Internet Explorer. Pou kreye yon objè COM, ou bezwen mete paramèt -ComObject ak ProgId pwogramasyon klas vle a:

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

Pou kreye pwòp objè ou yo ak yon estrikti abitrè, lè l sèvi avèk New-Object sanble twò akayik ak ankonbran; cmdlet sa a yo itilize pou travay ak konpozan lojisyèl ekstèn PowerShell. Nan atik lavni yo pral diskite sou pwoblèm sa a an plis detay. Anplis de objè .NET ak COM, nou pral eksplore tou objè CIM (WMI) ak ADSI.

Rele metòd estatik

Gen kèk klas .NET Core pa ka enstansye, tankou System.Environment ak System.Math. Yo ye estatik epi li genyen sèlman pwopriyete estatik ak metòd. Sa yo se esansyèlman bibliyotèk referans ki itilize san yo pa kreye objè. Ou ka refere a yon klas estatik atravè yon literal lè w mete non kalite a nan parantèz kare. Sepandan, si nou gade estrikti objè a lè l sèvi avèk Get-Member, nou pral wè kalite System.RuntimeType olye de System.Environment:

[System.Environment] | Get-Member

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Pou wè sèlman manm estatik, rele Get-Member ak paramèt -Static (note kalite objè a):

[System.Environment] | Get-Member -Static

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Pou jwenn aksè nan pwopriyete estatik ak metòd, sèvi ak de kolon youn apre lòt olye pou yo yon peryòd apre literal la:

[System.Environment]::OSVersion

Oswa

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Tape PSCustomObject

Pami anpil kalite done ki disponib nan PowerShell, li vo mansyone PSCustomObject, ki fèt pou estoke objè ki gen yon estrikti abitrè. Kreye yon objè konsa lè l sèvi avèk cmdlet New-Object konsidere kòm yon fason klasik, men ankonbran ak demode:

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

Ann gade nan estrikti objè a:

$object | Get-Member

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Kòmanse ak PowerShell 3.0, yon lòt sentaks ki disponib:

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

Ou ka jwenn aksè nan done yo nan youn nan fason ekivalan yo:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Men yon egzanp konvèti yon hashtable ki egziste deja nan yon objè:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Youn nan dezavantaj yo nan objè nan kalite sa a se ke lòd la nan pwopriyete yo ka chanje. Pou evite sa, ou dwe itilize atribi [kòmande]:

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

Gen lòt opsyon pou kreye yon objè: pi wo a nou te gade lè l sèvi avèk cmdlet la Chwazi-objè. Tout sa ki rete se kalkile ajoute ak retire eleman. Fè sa pou objè ki soti nan egzanp anvan an se byen senp:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Cmdlet Add-Member pèmèt ou ajoute non sèlman pwopriyete, men tou metòd pou yon $object ki te kreye deja lè w itilize konstriksyon "-MemberType ScriptMethod":

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

Tanpri sonje ke nou itilize varyab $ScriptBlock nan kalite ScriptBlock pou estoke kòd pou nouvo metòd la.

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Pou retire pwopriyete yo, sèvi ak metòd ki koresponn lan:

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

Kreye pwòp klas ou yo

PowerShell 5.0 prezante kapasite pou defini klas lè l sèvi avèk karakteristik sentaks nan langaj pwogram oryante objè. Mo sèvis Klas la fèt pou sa, apre sa ou ta dwe presize non klas la epi dekri kò li nan parantèz operatè yo:

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

Sa a se yon kalite .NET Nwayo vre, ak yon kò ki dekri pwopriyete li yo, metòd, ak lòt eleman. Ann gade nan yon egzanp defini klas ki pi senp la:

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

Pou kreye yon objè (egzanp klas), sèvi ak cmdlet la Nouvo-Objè, oswa yon literal nan kalite [MyClass] ak metòd pseudostatik nouvo (konstriktè defo):

$object = New-Object -TypeName MyClass

oswa

$object = [MyClass]::new()

Ann analize estrikti objè a:

$object | Get-Member

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Pa bliye sou sijè ki abòde: ou pa ka refere a yon non kalite kòm yon fisèl oswa itilize yon kalite literal deyò script la oswa modil kote yo defini klas la. Nan ka sa a, fonksyon yo ka retounen egzanp klas (objè) ki pral aksesib deyò modil la oswa script la.

Apre ou fin kreye objè a, ranpli pwopriyete li yo:

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

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Remake byen ke deskripsyon klas la presize non sèlman kalite pwopriyete yo, men tou, valè default yo:

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

Deskripsyon nan yon metòd klas sanble ak deskripsyon an nan yon fonksyon, men san yo pa itilize mo fonksyon an. Kòm nan yon fonksyon, paramèt yo pase nan metòd si sa nesesè:

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

Kounye a reprezantan klas nou an ka souri:

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

Metòd yo ka twò chaje; Anplis de sa, yon klas gen pwopriyete estatik ak metòd, osi byen ke konstrukteur ki gen non kowenside ak non klas la li menm. Yon klas ki defini nan yon script oswa yon modil PowerShell ka sèvi kòm yon baz pou yon lòt - se konsa eritaj aplike. Nan ka sa a, li pèmèt yo sèvi ak klas .NET ki deja egziste kòm klas de baz:

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

Deskripsyon nou an nan travay ak objè nan PowerShell se diman konplè. Nan piblikasyon sa yo, nou pral eseye apwofondi li ak egzanp pratik: senkyèm atik nan seri a pral konsakre nan pwoblèm yo nan entegre PowerShell ak eleman lojisyèl twazyèm pati. Pati sot pase yo ka jwenn nan lyen ki anba yo.

Pati 1: Karakteristik debaz Windows PowerShell
Pati 2: Entwodiksyon nan langaj pwogramasyon Windows PowerShell
Pati 3: pase paramèt nan scripts ak fonksyon, kreye cmdlets

Ki sa ki Windows PowerShell ak pou kisa li itilize? Pati 4: Travay ak objè, pwòp klas yo

Sous: www.habr.com

Add nouvo kòmantè