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
Catetan:
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é.
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:
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
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"}
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
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
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
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
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()
Ngagunakeun Pilih-Objék, Anjeun bisa nambah sipat diitung kana objék nu kudu digambarkeun salaku
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Hayu urang nempo struktur objék ngaliwatan conveyor nu:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
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.
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
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
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
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
[System.Environment] | Get-Member
Pikeun ningali ngan ukur anggota statik, nelepon Meunang Anggota sareng parameter -Static (perhatikeun jinis obyék):
[System.Environment] | Get-Member -Static
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()
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
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()
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
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
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.
Pikeun mupus sipat, paké metodeu anu cocog:
$object.psobject.properties.remove('Name')
Nyieun Kelas Anjeun Sorangan
PowerShell 5.0 ngenalkeun kamampuan pikeun ngartikeun
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
$object = New-Object -TypeName MyClass
atawa
$object = [MyClass]::new()
Hayu urang nganalisis struktur objék:
$object | Get-Member
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
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
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.
sumber: www.habr.com