Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Kaluaran téks paréntah dina jandela juru PowerShell ngan ukur cara pikeun nembongkeun inpormasi dina bentuk anu cocog pikeun persépsi manusa. Sabenerna Rebo berorientasi pikeun gawé kalawan objék: cmdlets sarta fungsi nampi aranjeunna salaku input na balik di kaluar, jeung tipe variabel sadia interaktif tur dina Aksara dumasar kana kelas .NET. Dina artikel kaopat séri, urang bakal diajar gawé bareng objék dina leuwih jéntré.

Catetan:

Objék dina PowerShell
Ningali struktur objék
Nyaring objék
Nyortir objék
Milih objék jeung bagian maranéhanana
Pikeun Unggal-Objék, Grup-Objék jeung Ukur-Objék
Nyiptakeun objék .NET sareng COM (Objék Anyar)
Nelepon Métode statik
Ketik PSCustomObject
Nyieun Kelas Anjeun Sorangan

Objék dina PowerShell

Hayu urang ngelingan yén hiji obyék nyaéta kumpulan data widang (sipat, kajadian, jsb) jeung métode pikeun ngolah maranéhanana (metode). Strukturna ditangtukeun ku jinis, anu biasana dumasar kana kelas anu dianggo dina platform .NET Core ngahiji. Ieu oge mungkin pikeun digawe sareng COM, CIM (WMI) jeung objék ADSI. Sipat sareng metode anu diperyogikeun pikeun ngalakukeun sababaraha tindakan dina data; salian ti éta, dina PowerShell, objék tiasa disalurkeun salaku argumen pikeun fungsi sareng cmdlet, ditugaskeun nilaina kana variabel, sareng aya ogé. mékanisme komposisi paréntah (conveyor atanapi pipa). Unggal paréntah dina pipa ngalirkeun kaluaran na ka hareup dina gilirannana, objék ku objék. Pikeun ngolah, anjeun tiasa nganggo cmdlet anu disusun atanapi ngadamel nyalira fitur canggihnedunan rupa manipulasi jeung objék dina pipa nu: nyaring, asihan, grouping, komo ngarobah struktur maranéhanana. Ngirimkeun data dina formulir ieu boga kaunggulan serius: tim panarima teu kudu parse stream byte (téks), sagala informasi diperlukeun gampang dimeunangkeun ku nelepon sipat luyu jeung métode.

Ningali struktur objék

Contona, hayu urang ngajalankeun cmdlet Meunang-Prosés, nu ngidinan Anjeun pikeun ménta inpo ngeunaan prosés jalan dina sistem:

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Bakal nembongkeun sababaraha data téks formatna nu teu masihan sagala gagasan ngeunaan sipat objék balik sarta métode maranéhanana. Pikeun nyempurnakeun kaluaran, urang kedah diajar kumaha mariksa struktur objék, sareng cmdlet Get-Member bakal ngabantosan kami:

Get-Process | Get-Member

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Di dieu urang geus ningali jenis jeung struktur, sarta kalayan bantuan parameter tambahan urang bisa, contona, némbongkeun ukur sipat objék kaasup dina input:

Get-Process | Get-Member -MemberType Property

Pangaweruh ieu bakal dipikabutuh pikeun ngajawab masalah administrasi sacara interaktif atanapi nyerat skrip anjeun nyalira: contona, pikeun kéngingkeun inpormasi ngeunaan prosés ngagantung nganggo properti Ngaréspon.

Nyaring objék

PowerShell ngamungkinkeun objék anu nyumponan kaayaan anu tangtu pikeun dialirkeun ngaliwatan pipa:

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

Hasil tina ngajalankeun blok skrip dina jero kurung kedah janten nilai boolean. Lamun bener ($ leres), obyék anu input ka mana-Objék cmdlet bakal diliwatan sapanjang pipa, disebutkeun ($ palsu) eta bakal dihapus. Contona, hayu urang mintonkeun daptar ladenan Windows Server dieureunkeun, i.e. jalma anu sipat Statusna disetel ka "Dieureunkeun":

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Di dieu deui urang ningali ngagambarkeun tékstual, tapi lamun hayang ngarti jenis jeung struktur internal tina objék ngaliwatan pipa teu hese:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Nyortir objék

Nalika ngolah pipa objék, sering aya kabutuhan pikeun nyortir aranjeunna. Cmdlet Sort-Objék disalurkeun nami sipat (konci asihan) sareng mulihkeun objék anu diurutkeun ku nilaina. Gampang nyortir kaluaran prosés anu dijalankeun ku waktos CPU anu dihabiskeun (milik CPU):

Get-Process | Sort-Object –Property cpu

Parameter -Property tiasa dileungitkeun nalika nyauran cmdlet Sort-Object; dianggo sacara standar. Pikeun asihan sabalikna, paké parameter -Descending:

Get-Process | Sort-Object cpu -Descending

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Milih objék jeung bagian maranéhanana

Cmdlet Pilih-Objék ngidinan Anjeun pikeun milih sajumlah objék husus di awal atawa tungtung hiji pipa ngagunakeun parameter -First atawa -Last. Kalayan pitulungna, anjeun tiasa milih obyék tunggal atanapi sipat anu tangtu, sareng ogé nyiptakeun objék énggal dumasar kana éta. Hayu urang tingali kumaha cmdlet dianggo nganggo conto saderhana.

Paréntah di handap ieu nampilkeun inpormasi ngeunaan prosés 10 anu nganggo jumlah maksimum RAM (milik WS):

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Anjeun ngan ukur tiasa milih pasipatan anu tangtu tina objék anu ngalangkungan pipa sareng nyiptakeun anu anyar dumasar kana éta:

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

Salaku hasil tina operasi pipa urang, urang bakal nampa hiji obyék anyar, struktur nu bakal béda ti struktur balik ku Get-Proses cmdlet. Hayu urang pariksa ieu nganggo Get-Member:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Catet yén Pilih-Objék mulihkeun hiji obyék tunggal (-Mimiti 1) anu ngan ukur gaduh dua widang anu kami khususkeun: nilai-nilaina disalin tina obyék anu munggaran dilebetkeun kana pipa ku Get-Process cmdlet. Salah sahiji cara pikeun nyiptakeun objék dina skrip PowerShell dumasar kana ngagunakeun Select-Object:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Ngagunakeun Pilih-Objék, Anjeun bisa nambah sipat diitung kana objék nu kudu digambarkeun salaku tabél hash. Dina hal ieu, nilai konci kahijina pakait jeung ngaran sipat, sarta nilai konci kadua pakait jeung nilai sipat pikeun elemen pipa ayeuna:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Hayu urang nempo struktur objék ngaliwatan conveyor nu:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Pikeun Unggal-Objék, Grup-Objék jeung Ukur-Objék

Aya cmdlet séjén pikeun gawé bareng objék. Salaku conto, hayu urang ngobrol ngeunaan tilu pang gunana:

Pikeun Unggal-Objék ngidinan Anjeun pikeun ngajalankeun kode PowerShell pikeun tiap obyék dina pipa:

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

Grup-Objék grup objék dumasar nilai sipat:

Group-Object PropertyName

Lamun ngajalankeun eta kalawan parameter -NoElement, anjeun tiasa manggihan jumlah elemen dina grup.

Ukur-Objék aggregates rupa parameter kasimpulan ku nilai widang obyék dina pipa (ngitung jumlah, sarta ogé manggihan nilai minimum, maksimum atawa rata):

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

Biasana, cmdlet anu dibahas dianggo sacara interaktif, sareng sering didamel dina naskah. fungsi kalawan Mimitian, Prosés jeung tungtung blok.

Nyiptakeun objék .NET sareng COM (Objék Anyar)

Aya loba komponén software kalawan .NET Core na COM interfaces anu mangpaat pikeun administrator sistem. Nganggo kelas System.Diagnostics.EventLog, anjeun tiasa ngatur log sistem langsung tina Windows PowerShell. Hayu urang nempo conto nyieun hiji conto kelas ieu ngagunakeun New-Objék cmdlet kalawan parameter -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Kusabab urang teu nangtukeun hiji acara log husus, conto hasilna kelas ngandung euweuh data. Pikeun ngarobih ieu, anjeun kedah nyauran metode konstruktor khusus nalika nyiptakeunana nganggo parameter -ArgumentList. Upami urang hoyong ngaksés log aplikasi, urang kedah ngalangkungan string "Aplikasi" salaku argumen pikeun konstruktor:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Punten dicatet yén kami nyimpen kaluaran paréntah dina variabel $ AppLog. Sanajan pipelines ilahar dipaké dina modeu interaktif, nulis Aksara mindeng merlukeun ngajaga rujukan ka hiji obyék. Salaku tambahan, kelas inti .NET Core dikandung dina namespace System: PowerShell sacara standar milarian jinis anu ditangtukeun dina éta, janten nyerat Diagnostics.EventLog tinimbang System.Diagnostics.EventLog leres pisan.

Pikeun damel sareng log, anjeun tiasa nganggo metode anu cocog:

$AppLog | Get-Member -MemberType Method

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Sebutkeun éta diberesihan ku metode Clear () upami aya hak aksés:

$AppLog.Clear()

The New-Objék cmdlet ogé dipaké pikeun digawekeun ku komponén COM. Aya seueur pisan - ti perpustakaan anu disayogikeun ku server skrip Windows ka aplikasi ActiveX, sapertos Internet Explorer. Pikeun nyieun obyék COM, anjeun kedah nyetél parameter -ComObject sareng ProgId programmatic tina kelas anu dipikahoyong:

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

Pikeun nyieun objék sorangan kalawan struktur arbitrary, ngagunakeun New-Objék sigana teuing kolot jeung pajeujeut; cmdlet ieu dipaké pikeun gawé bareng komponén software éksternal PowerShell. Dina artikel hareup masalah ieu bakal dibahas dina leuwih jéntré. Salian objék .NET jeung COM, urang ogé bakal ngajajah CIM (WMI) jeung objék ADSI.

Nelepon Métode statik

Sababaraha kelas .NET Core teu bisa instantiated, kaasup System.Environment na System.Math. Maranéhna nyaéta statik sarta ngandung ukur sipat statik jeung métode. Ieu dasarna perpustakaan rujukan nu dipaké tanpa nyieun objék. Anjeun tiasa ningali ka kelas statik ngaliwatan literal ku ngalampirkeun nami tipe dina kurung kuadrat. Sanajan kitu, lamun urang nempo struktur obyék ngagunakeun Meunangkeun-Anggota, urang bakal ningali tipe System.RuntimeType tinimbang System.Environment:

[System.Environment] | Get-Member

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Pikeun ningali ngan ukur anggota statik, nelepon Meunang Anggota sareng parameter -Static (perhatikeun jinis obyék):

[System.Environment] | Get-Member -Static

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Pikeun ngakses sipat statik jeung métode, make dua titik titik padeukeut tinimbang titik sanggeus literal:

[System.Environment]::OSVersion

atawa

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Ketik PSCustomObject

Diantara seueur jinis data anu aya dina PowerShell, kedah disebatkeun PSCustomObject, dirancang pikeun nyimpen objék kalayan struktur anu sawenang-wenang. Nyiptakeun obyék sapertos kitu nganggo New-Object cmdlet dianggap cara klasik, tapi pajeujeut sareng tinggaleun jaman:

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

Hayu urang nempo struktur objék:

$object | Get-Member

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Dimimitian ku PowerShell 3.0, sintaksis sanésna sayogi:

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

Anjeun tiasa ngaksés data dina salah sahiji cara anu sami:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Ieu conto pikeun ngarobah hashtable anu tos aya kana obyék:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Salah sahiji kalemahan objék tina tipe ieu nyaéta yén urutan sipat maranéhanana bisa robah. Pikeun ngahindarkeun ieu, anjeun kedah nganggo atribut [diurutkeun]:

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

Aya pilihan séjén pikeun nyieun hiji obyék: di luhur urang nempo ngagunakeun cmdlet Pilih-Obyék. Sadaya anu tetep nyaéta pikeun nambihan sareng ngahapus unsur. Ngalakukeun ieu pikeun obyék tina conto sateuacana cukup saderhana:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

The Add-Member cmdlet ngidinan Anjeun pikeun nambahkeun teu ukur sipat, tapi ogé métode pikeun $ objék dijieun saméméhna ku ngagunakeun "-MemberType ScriptMethod" ngawangun:

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

Punten dicatet yén kami nganggo variabel $ScriptBlock tina tipe ScriptBlock pikeun nyimpen kodeu metodeu anyar.

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Pikeun mupus sipat, paké metodeu anu cocog:

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

Nyieun Kelas Anjeun Sorangan

PowerShell 5.0 ngenalkeun kamampuan pikeun ngartikeun kelas ngagunakeun ciri sintaksis tina basa program berorientasi obyék. Kecap jasa Kelas dimaksudkeun pikeun ieu, saatos éta anjeun kedah netepkeun nami kelas sareng ngajelaskeun awakna dina kurung operator:

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

Ieu mangrupikeun jinis .NET Core anu leres, kalayan badan anu ngajelaskeun sipat, metode, sareng elemen anu sanés. Hayu urang tingali conto nangtukeun kelas pangbasajanna:

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

Pikeun nyieun obyék (conto kelas), paké cmdlet Anyar-Objék, atawa literal tina tipe [MyClass] jeung métode pseudostatic anyar (default constructor):

$object = New-Object -TypeName MyClass

atawa

$object = [MyClass]::new()

Hayu urang nganalisis struktur objék:

$object | Get-Member

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Tong hilap ngeunaan wengkuan: anjeun moal tiasa ngarujuk kana nami jinis salaku senar atanapi nganggo jinis literal di luar naskah atanapi modul dimana kelas diartikeun. Dina hal ieu, fungsi bisa balik instansi kelas (objék) nu bakal diaksés di luar modul atawa naskah.

Saatos nyiptakeun obyék, eusian pasipatanana:

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

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

Catet yén déskripsi kelas henteu ngan ukur nunjukkeun jinis harta, tapi ogé nilai standarna:

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

Katerangan ngeunaan métode kelas nyarupaan déskripsi fungsi, tapi tanpa ngagunakeun kecap fungsi. Sapertos dina fungsi, parameter diteruskeun ka metode upami diperyogikeun:

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

Ayeuna wawakil kelas urang tiasa seuri:

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

Metoda bisa overloaded; Sajaba ti éta, kelas boga sipat statik jeung métode, kitu ogé konstruktor anu ngaranna coincide jeung ngaran kelas sorangan. Kelas anu ditetepkeun dina naskah atanapi modul PowerShell tiasa janten dasar pikeun anu sanés - ieu kumaha warisan dilaksanakeun. Dina hal ieu, diidinan nganggo kelas .NET anu tos aya salaku dasar:

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

Katerangan urang ngeunaan gawé bareng objék dina PowerShell boro tuntas. Dina publikasi di handap ieu, urang bakal nyoba deepen eta kalawan conto praktis: artikel kalima dina séri bakal devoted kana isu integral tina PowerShell jeung komponén software pihak katilu. Bagian anu baheula tiasa dipendakan dina tautan di handap.

Bagian 1: Fitur Dasar Windows PowerShell
Bagian 2: Perkenalan kana Windows PowerShell Programming Language
Bagian 3: ngalirkeun parameter kana skrip sareng fungsi, nyiptakeun cmdlet

Naon Windows PowerShell sareng naon anu dianggo? Bagian 4: Gawe sareng objék, kelas sorangan

sumber: www.habr.com

Tambahkeun komentar