Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Output teks saka printah ing jendhela interpreter PowerShell mung minangka cara kanggo nampilake informasi ing wangun sing cocog kanggo persepsi manungsa. Sejatine Rebo berorientasi kanggo nggarap obyek: cmdlet lan fungsi nampa minangka input lan bali ing metu, lan jinis variabel sing kasedhiya kanthi interaktif lan ing skrip adhedhasar kelas .NET. Ing artikel kaping papat saka seri, kita bakal sinau nggarap obyek kanthi luwih rinci.

Gamelan:

Obyek ing PowerShell
Ndeleng struktur obyek
Nyaring obyek
Ngurutake obyek
Milih obyek lan bagean
Kanggo Saben-Obyek, Kelompok-Obyek lan Ukur-Obyek
Nggawe obyek .NET lan COM (Obyek Anyar)
Nelpon Metode Statis
Ketik PSCustomObject
Nggawe Kelas Sampeyan Dhewe

Obyek ing PowerShell

Elinga yen obyek minangka kumpulan data lapangan (properti, acara, lan liya-liyane) lan cara kanggo ngolah (metode). Struktur kasebut ditemtokake dening jinis, sing biasane adhedhasar kelas sing digunakake ing platform NET inti sing digabungake. Sampeyan uga bisa nggarap obyek COM, CIM (WMI) lan ADSI. Properti lan metode dibutuhake kanggo nindakake macem-macem tumindak ing data; Kajaba iku, ing PowerShell, obyek bisa diterusake minangka argumen kanggo fungsi lan cmdlet, menehi nilai kanggo variabel, lan uga ana. mekanisme komposisi printah (conveyor utawa pipeline). Saben printah ing pipeline ngirim output menyang sabanjuré ing siji, obyek dening obyek. Kanggo ngolah, sampeyan bisa nggunakake cmdlet kompilasi utawa nggawe dhewe fitur majengkanggo nindakake macem-macem manipulasi karo obyek ing pipeline: nyaring, ngurutake, kelompok, lan malah ngganti struktur. Ngirim data ing wangun iki nduweni kauntungan serius: tim panampa ora perlu kanggo parse stream byte (teks), kabeh informasi sing perlu gampang dijupuk dening nelpon sifat lan cara cocok.

Ndeleng struktur obyek

Contone, ayo mbukak cmdlet Get-Process, sing ngidini sampeyan entuk informasi babagan proses sing mlaku ing sistem:

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Bakal nampilake sawetara data teks sing diformat sing ora menehi ide babagan sifat obyek sing bali lan metodee. Kanggo nyempurnakake output, kita kudu sinau carane mriksa struktur obyek, lan cmdlet Get-Member bakal mbantu kita:

Get-Process | Get-Member

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Ing kene kita wis ndeleng jinis lan struktur, lan kanthi bantuan paramèter tambahan, umpamane, mung nampilake properti obyek sing kalebu ing input:

Get-Process | Get-Member -MemberType Property

Kawruh iki bakal dibutuhake kanggo ngatasi masalah administrasi kanthi interaktif utawa nulis skrip sampeyan dhewe: contone, kanggo entuk informasi babagan proses gantung nggunakake properti Responding.

Nyaring obyek

PowerShell ngidini obyek sing nyukupi kondisi tartamtu bisa dilewati liwat pipa:

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

Asil eksekusi blok skrip ing kurung kudu dadi nilai boolean. Yen bener ($ bener), obyek sing input menyang Where-Obyek cmdlet bakal liwati sadawane pipeline, yen ($ palsu) bakal dibusak. Contone, ayo nampilake dhaptar layanan Windows Server sing mandheg, yaiku. sing properti Status disetel dadi "Stop":

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Ing kene maneh kita ndeleng perwakilan teks, nanging yen sampeyan pengin ngerti jinis lan struktur internal obyek sing ngliwati pipa ora angel:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Ngurutake obyek

Nalika proses pipa obyek, asring perlu kanggo ngurutake. Cmdlet Sort-Object dilewati jeneng properti (tombol ngurutake) lan ngasilake obyek sing diurutake miturut nilai. Gampang kanggo ngurutake output proses sing mlaku miturut wektu CPU (properti CPU):

Get-Process | Sort-Object –Property cpu

Parameter -Property bisa diilangi nalika nelpon cmdlet Sort-Object; digunakake minangka standar. Kanggo ngurutake mbalikke, gunakake parameter -Descending:

Get-Process | Sort-Object cpu -Descending

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Milih obyek lan bagean

Cmdlet Pilih-Obyek ngidini sampeyan milih jumlah obyek tartamtu ing wiwitan utawa pungkasan pipa nggunakake parameter -First utawa -Last. Kanthi bantuan, sampeyan bisa milih obyek siji utawa properti tartamtu, lan uga nggawe obyek anyar adhedhasar. Ayo goleki cara kerja cmdlet nggunakake conto sing gampang.

Printah ing ngisor iki nampilake informasi babagan proses 10 sing nggunakake jumlah maksimum RAM (properti WS):

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Sampeyan mung bisa milih properti tartamtu saka obyek sing ngliwati pipa lan nggawe sing anyar adhedhasar:

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

Minangka asil saka operasi pipeline, kita bakal nampa obyek anyar, struktur kang bakal beda-beda saka struktur bali dening Get-Proses cmdlet. Ayo verifikasi iki nggunakake Get-Member:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Elinga yen Pilih-Obyek ngasilake obyek siji (-First 1) sing mung duwe rong kolom sing ditemtokake: nilai-nilai kasebut disalin saka obyek pisanan sing dilewati menyang pipa dening cmdlet Get-Process. Salah sawijining cara kanggo nggawe obyek ing skrip PowerShell adhedhasar nggunakake Select-Object:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Nggunakake Pilih-Obyek, sampeyan bisa nambah properti diitung kanggo obyek sing kudu dituduhake minangka tabel hash. Ing kasus iki, nilai kunci pisanan cocog karo jeneng properti, lan nilai tombol kapindho cocog karo nilai properti kanggo unsur pipa saiki:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Ayo ndeleng struktur obyek sing ngliwati conveyor:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Kanggo Saben-Obyek, Kelompok-Obyek lan Ukur-Obyek

Ana cmdlet liyane kanggo nggarap obyek. Minangka conto, ayo ngomong babagan telung sing paling migunani:

Kanggo Saben-Obyek ngidini sampeyan mbukak kode PowerShell kanggo saben obyek ing pipa:

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

Kelompok-Obyek klompok obyek miturut nilai properti:

Group-Object PropertyName

Yen sampeyan mbukak karo parameter -NoElement, sampeyan bisa mangerteni nomer unsur ing grup.

Ukur-Obyek nglumpukake macem-macem paramèter ringkesan miturut nilai lapangan obyek ing pipeline (ngetung jumlah, lan uga nemokake nilai minimal, maksimum utawa rata-rata):

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

Biasane, cmdlet sing dibahas digunakake kanthi interaktif, lan asring digawe ing skrip. fungsi karo Mulai, Proses lan mungkasi pamblokiran.

Nggawe obyek .NET lan COM (Obyek Anyar)

Ana akeh komponen lunak karo .NET inti lan COM antarmuka sing migunani kanggo administrator sistem. Nggunakake kelas System.Diagnostics.EventLog, sampeyan bisa ngatur log sistem langsung saka Windows PowerShell. Ayo goleki conto nggawe conto kelas iki nggunakake cmdlet New-Object kanthi parameter -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Amarga kita ora nemtokake log acara tartamtu, asil saka kelas kasebut ora ana data. Kanggo ngganti iki, sampeyan kudu nelpon cara konstruktor khusus nalika nggawe nggunakake parameter -ArgumentList. Yen kita pengin ngakses log aplikasi, kita kudu ngliwati string "Aplikasi" minangka argumen kanggo konstruktor:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Wigati dimangerteni manawa kita nyimpen output perintah kasebut ing variabel $AppLog. Sanajan pipeline umume digunakake ing mode interaktif, nulis skrip asring mbutuhake referensi kanggo obyek. Kajaba iku, kelas inti .NET Core ana ing ruang jeneng Sistem: PowerShell kanthi gawan katon kanggo jinis tartamtu ing, supaya nulis Diagnostics.EventLog tinimbang System.Diagnostics.EventLog cukup bener.

Kanggo nggarap log, sampeyan bisa nggunakake cara sing cocog:

$AppLog | Get-Member -MemberType Method

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Ayo ngomong yen wis dibusak kanthi cara Clear () yen ana hak akses:

$AppLog.Clear()

New-Object cmdlet uga digunakake kanggo nggarap komponen COM. Ana cukup akeh - saka perpustakaan sing diwenehake karo server skrip Windows nganti aplikasi ActiveX, kayata Internet Explorer. Kanggo nggawe obyek COM, sampeyan kudu nyetel parameter -ComObject karo ProgId program saka kelas sing dikarepake:

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

Kanggo nggawe obyek sampeyan dhewe kanthi struktur sing sewenang-wenang, nggunakake New-Object katon banget kuno lan rumit; cmdlet iki digunakake kanggo nggarap komponen piranti lunak njaba PowerShell. Ing artikel sabanjure, masalah iki bakal dibahas kanthi luwih rinci. Saliyane obyek .NET lan COM, kita uga bakal njelajah obyek CIM (WMI) lan ADSI.

Nelpon Metode Statis

Sawetara .NET inti kelas ora bisa instantiated, kalebu System.Environment lan System.Math. Padha statis lan mung ngemot sifat lan cara statis. Iki minangka perpustakaan referensi sing digunakake tanpa nggawe obyek. Sampeyan bisa ngrujuk menyang kelas statis liwat literal kanthi nglampirake jeneng jinis ing kurung kothak. Nanging, yen kita ndeleng struktur obyek nggunakake Get-Member, kita bakal weruh jinis System.RuntimeType tinimbang System.Environment:

[System.Environment] | Get-Member

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Kanggo ndeleng mung anggota statis, nelpon Get-Member kanthi parameter -Static (cathetan jinis obyek):

[System.Environment] | Get-Member -Static

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Kanggo ngakses sifat lan cara statis, gunakake rong titik loro sing berturut-turut tinimbang titik sawise literal:

[System.Environment]::OSVersion

Utawa

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Ketik PSCustomObject

Ing antarane macem-macem jinis data sing kasedhiya ing PowerShell, kudu disebutake PSCustomObject, sing dirancang kanggo nyimpen obyek kanthi struktur sing sewenang-wenang. Nggawe obyek kasebut nggunakake cmdlet New-Object dianggep minangka cara klasik, nanging rumit lan ketinggalan jaman:

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

Ayo ndeleng struktur obyek:

$object | Get-Member

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Miwiti karo PowerShell 3.0, sintaks liyane kasedhiya:

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

Sampeyan bisa ngakses data kanthi salah siji cara sing padha:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Iki conto ngowahi hashtable sing wis ana dadi obyek:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Salah sijine kekurangan obyek saka jinis iki yaiku urutan sifate bisa diganti. Kanggo ngindhari iki, sampeyan kudu nggunakake atribut [urutan]:

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

Ana opsi liyane kanggo nggawe obyek: ndhuwur kita katon ing nggunakake cmdlet Pilih-Obyek. Kabeh sing isih ana yaiku kanggo ngerteni nambah lan mbusak unsur. Nindakake iki kanggo obyek saka conto sadurunge cukup prasaja:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Cmdlet Tambah Anggota ngidini sampeyan nambahake ora mung properti, nanging uga cara kanggo $objek sing digawe sadurunge kanthi nggunakake konstruksi "-MemberType ScriptMethod":

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

Elinga yen kita nggunakake variabel $ScriptBlock saka jinis ScriptBlock kanggo nyimpen kode kanggo metode anyar.

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Kanggo mbusak properti, gunakake cara sing cocog:

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

Nggawe Kelas Sampeyan Dhewe

PowerShell 5.0 ngenalake kemampuan kanggo nemtokake kelas nggunakake karakteristik sintaksis saka basa pemrograman berorientasi obyek. Tembung layanan Kelas dimaksudaké kanggo iki, banjur sampeyan kudu nemtokake jeneng kelas lan njlèntrèhaké awak ing kurung operator:

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

Iki minangka jinis inti .NET sing bener, kanthi awak sing nggambarake sifat, metode, lan unsur liyane. Ayo goleki conto kanggo nemtokake kelas sing paling gampang:

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

Kanggo nggawe obyek (kayata kelas), gunakake cmdlet Obyek anyar, utawa literal saka jinis [MyClass] lan metode pseudostatik anyar (konstruktor standar):

$object = New-Object -TypeName MyClass

utawa

$object = [MyClass]::new()

Ayo analisa struktur obyek kasebut:

$object | Get-Member

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Aja lali bab orane katrangan: sampeyan ora bisa deleng jeneng jinis minangka senar utawa nggunakake jinis literal njaba script utawa modul kang kelas ditetepake. Ing kasus iki, fungsi bisa bali kedadean kelas (obyek) sing bakal diakses njaba modul utawa script.

Sawise nggawe obyek, isi properti kasebut:

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

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Elinga yen deskripsi kelas ora mung nemtokake jinis properti, nanging uga nilai standar:

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

Katrangan cara kelas padha karo katrangan fungsi, nanging tanpa nggunakake tembung fungsi. Kaya ing fungsi, paramèter dikirim menyang metode yen perlu:

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

Saiki wakil saka kelas kita bisa mesem:

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

Metode bisa kakehan; Kajaba iku, kelas duwe sifat statis lan cara, uga konstruktor sing jenenge pas karo jeneng kelas kasebut. Kelas sing ditetepake ing skrip utawa modul PowerShell bisa dadi basis kanggo liyane - iki minangka warisan dileksanakake. Ing kasus iki, diijini nggunakake kelas .NET sing ana minangka basis:

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

Katrangan babagan nggarap obyek ing PowerShell meh ora lengkap. Ing publikasi ing ngisor iki, kita bakal nyoba njlentrehake kanthi conto praktis: artikel kaping lima ing seri kasebut bakal dikhususake kanggo masalah nggabungake PowerShell karo komponen piranti lunak pihak katelu. Bagean kepungkur bisa ditemokake ing tautan ing ngisor iki.

Part 1: Fitur Windows PowerShell dhasar
Part 2: Pambuka kanggo Windows PowerShell Programming Language
Bagean 3: maringake paramèter menyang skrip lan fungsi, nggawe cmdlet

Apa Windows PowerShell lan kanggo apa? Part 4: Nggarap obyek, kelas dhewe

Source: www.habr.com

Add a comment