Output teks saka printah ing jendhela interpreter PowerShell mung minangka cara kanggo nampilake informasi ing wangun sing cocog kanggo persepsi manungsa. Sejatine Rebo
Gamelan:
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.
Ndeleng struktur obyek
Contone, ayo mbukak cmdlet Get-Process, sing ngidini sampeyan entuk informasi babagan proses sing mlaku ing sistem:
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
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"}
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
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
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
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
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()
Nggunakake Pilih-Obyek, sampeyan bisa nambah properti diitung kanggo obyek sing kudu dituduhake minangka
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Ayo ndeleng struktur obyek sing ngliwati conveyor:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
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.
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
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
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
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
[System.Environment] | Get-Member
Kanggo ndeleng mung anggota statis, nelpon Get-Member kanthi parameter -Static (cathetan jinis obyek):
[System.Environment] | Get-Member -Static
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()
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
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()
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
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
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.
Kanggo mbusak properti, gunakake cara sing cocog:
$object.psobject.properties.remove('Name')
Nggawe Kelas Sampeyan Dhewe
PowerShell 5.0 ngenalake kemampuan kanggo nemtokake
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
$object = New-Object -TypeName MyClass
utawa
$object = [MyClass]::new()
Ayo analisa struktur obyek kasebut:
$object | Get-Member
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
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
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.
Source: www.habr.com