Ukukhishwa kombhalo wemiyalo efasiteleni lomhumushi we-PowerShell kuyindlela nje yokubonisa ulwazi ngendlela efanelekile ukubonwa komuntu. Empeleni ngoLwesithathu
Incazelo:
Izinto ku-PowerShell
Masikhumbule ukuthi into iqoqo lezinkambu zedatha (izakhiwo, imicimbi, njll.) nezindlela zokuzicubungula (izindlela). Isakhiwo sawo sicaciswa uhlobo, oluvame ukusekelwe kumakilasi asetshenziswa kuplathifomu ehlanganisiwe ye-NET Core. Kungenzeka futhi ukusebenza ngezinto ze-COM, CIM (WMI) kanye ne-ADSI. Izakhiwo nezindlela ziyadingeka ukwenza izenzo ezahlukahlukene kudatha; ngaphezu kwalokho, ku-PowerShell, izinto zingadluliswa njengezingxabano emisebenzini kanye nama-cmdlets, zabelwe amanani azo kokuguquguqukayo, futhi kukhona
Ukubuka ukwakheka kwezinto
Isibonelo, ake sisebenzise i-Get-Process cmdlet, ekuvumela ukuthi uthole ulwazi mayelana nezinqubo ezisebenza ohlelweni:
Izobonisa idatha ethile yombhalo efomethiwe enganikezi noma yimuphi umbono mayelana nezakhiwo zezinto ezibuyisiwe nezindlela zazo. Ukuze silungise okukhiphayo, sidinga ukufunda indlela yokuhlola ukwakheka kwezinto, futhi i-Get-Member cmdlet izosisiza ngalokhu:
Get-Process | Get-Member
Lapha sesivele sibona uhlobo nesakhiwo, futhi ngosizo lwemingcele eyengeziwe singakwazi, isibonelo, ukubonisa kuphela izakhiwo zento efakwe okokufaka:
Get-Process | Get-Member -MemberType Property
Lolu lwazi luzodingeka ukuze uxazulule izinkinga zokuphatha ngokuhlanganyela noma ukubhala imibhalo yakho siqu: isibonelo, ukuthola ulwazi mayelana nezinqubo ezilengayo usebenzisa indawo yokuphendula.
Ukuhlunga izinto
I-PowerShell ivumela izinto ezihlangabezana nesimo esithile ukuthi zidlule ngepayipi:
Where-Object { блок сценария }
Umphumela wokusebenzisa ibhulokhi yeskripthi phakathi kwabakaki kumelwe ube inani le-boolean. Uma kuyiqiniso ($true), into efakwayo kokuthi Where-Object cmdlet izodluliswa ngepayipi, ngaphandle kwalokho ($false) izosuswa. Isibonelo, ake sibonise uhlu lwezinsizakalo ezimisiwe zeWindows Server, i.e. labo abasesimweni sabo sisethwe ukuze sithi “Kumisiwe”:
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Lapha futhi sibona ukumelwa kombhalo, kodwa uma ufuna ukuqonda uhlobo nesakhiwo sangaphakathi sezinto ezidlula epayipini akunzima:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Ukuhlunga izinto
Lapho kucutshungulwa amapayipi ezinto, kuvame ukuba nesidingo sokuzihlunga. I-Sort-Object cmdlet idluliswa amagama ezakhiwo (okhiye bokuhlunga) futhi ibuyisela izinto ezi-odwe ngamavelu azo. Kulula ukuhlunga okukhiphayo kwezinqubo ezisebenzayo ngesikhathi se-CPU esichithiwe (impahla ye-cpu):
Get-Process | Sort-Object –Property cpu
Ipharamitha -Property ingashiywa lapho kubizwa i-Sort-Object cmdlet; isetshenziswa ngokuzenzakalelayo. Ukuhlunga ngokuhlehla, sebenzisa ipharamitha ethi -Descending:
Get-Process | Sort-Object cpu -Descending
Ukukhetha izinto nezingxenye zazo
I-Select-Object cmdlet ikuvumela ukuthi ukhethe inani elithile lezinto ekuqaleni noma ekupheleni kwepayipi usebenzisa ipharamitha -Yokuqala noma -Yokugcina. Ngosizo lwayo, ungakhetha izinto ezingashadile noma izakhiwo ezithile, futhi udale izinto ezintsha ngokusekelwe kuzo. Ake sibheke ukuthi i-cmdlet isebenza kanjani sisebenzisa izibonelo ezilula.
Umyalo olandelayo ubonisa ulwazi mayelana nezinqubo ezingu-10 ezisebenzisa inani eliphezulu le-RAM (impahla ye-WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Ungakhetha kuphela izakhiwo ezithile zezinto ezidlula epayipini bese udala ezintsha ngokusekelwe kuzo:
Get-Process | Select-Object ProcessName, Id -First 1
Njengomphumela wokusebenza kwepayipi, sizothola into entsha, ukwakheka kwayo okuzohluka esakhiweni esibuyiswe yi-Get-Process cmdlet. Masiqinisekise lokhu sisebenzisa i-Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Qaphela ukuthi i-Select-Object ibuyisela into eyodwa (-First 1) enezinkambu ezimbili kuphela esizicacisile: amanani azo akopishwe entweni yokuqala edluliselwe epayipini yi-cmdlet ye-Get-Process. Enye yezindlela zokudala izinto kumibhalo ye-PowerShell isuselwe ekusebenziseni i-Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Ngokusebenzisa Khetha-Into, ungakwazi ukwengeza izakhiwo zekhompuyutha ezintweni ezidinga ukumelwa njenge
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Ake sibheke ukwakheka kwezinto ezidlula ku-conveyor:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
Kwento Ngayinye, Into Yeqembu kanye Nento Yokulinganisa
Kukhona amanye ama-cmdlets okusebenza ngezinto. Njengesibonelo, ake sikhulume ngezinto ezintathu eziwusizo kakhulu:
Into Ngayinye ikuvumela ukuthi usebenzise ikhodi ye-PowerShell entweni ngayinye esendleleni:
ForEach-Object { блок сценария }
Iqembu-Into ihlanganisa izinto ngevelu yendawo:
Group-Object PropertyName
Uma uyisebenzisa ngepharamitha -NoElement, ungathola inani lezinto emaqenjini.
Kala-Into ihlanganisa amapharamitha afingqiwe ahlukahlukene ngamavelu enkambu yento ephayiphini (ibala isamba, futhi ithola ubuncane, inani eliphakeme noma elimaphakathi):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Imvamisa, ama-cmdlets okuxoxwe ngawo asetshenziswa ngokuhlanganyela, futhi avame ukudalwa emibhalweni.
Ukudala izinto ze-NET kanye ne-COM (Into Entsha)
Ziningi izingxenye zesofthiwe ezine-.NET Core kanye ne-COM interface eziwusizo kubaphathi besistimu. Usebenzisa ikilasi le-System.Diagnostics.EventLog, ungaphatha amalogi esistimu ngokuqondile ku-Windows PowerShell. Ake sibheke isibonelo sokwenza isibonelo saleli klasi sisebenzisa i-New-Object cmdlet enepharamitha ye-TypeName:
New-Object -TypeName System.Diagnostics.EventLog
Njengoba singacacisanga ilogu yomcimbi ethile, isibonelo esiwumphumela sekilasi asiqukethe idatha. Ukuze ushintshe lokhu, udinga ukubiza indlela yomakhi ekhethekile ngesikhathi sokudalwa kwayo usebenzisa ipharamitha ye-ArgumentList. Uma sifuna ukufinyelela kulogi yohlelo lokusebenza, kufanele sidlulise umucu othi "Isicelo" njengengxabano kumakhi:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Sicela uqaphele ukuthi silondoloze okukhiphayo komyalo kokuhluka kwe-$AppLog. Nakuba amapayipi ngokuvamile esetshenziswa kumodi yokusebenzisana, ukubhala imibhalo ngokuvamile kudinga ukugcinwa kwereferensi entweni. Ukwengeza, amakilasi angumongo we-.NET Core aqukethwe ku-System namespace: I-PowerShell ngokuzenzakalelayo ibheka izinhlobo ezishiwo kuyo, ngakho ukubhala i-Diagnostics.EventLog esikhundleni sokuthi i-System.Diagnostics.EventLog ilungile impela.
Ukuze usebenze nelogi, ungasebenzisa izindlela ezifanele:
$AppLog | Get-Member -MemberType Method
Ake sithi kusulwa ngendlela ye-Clear() uma kukhona amalungelo okufinyelela:
$AppLog.Clear()
I-cmdlet ye-New-Object nayo isetshenziselwa ukusebenza nezingxenye ze-COM. Ziningi impela - kusukela emitatsheni yolwazi ehlinzekwa nge-Windows script server kuya ezinhlelweni zokusebenza ze-ActiveX, njenge-Internet Explorer. Ukuze udale into ye-COM, udinga ukusetha ipharamitha -ComObject ngeProgId ehleliwe yekilasi olifunayo:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Ukuze udale izinto zakho ngesakhiwo esingenangqondo, usebenzisa i-New-Object ibonakala iyindala kakhulu futhi inzima; le cmdlet isetshenziselwa ukusebenza nezingxenye zesofthiwe ngaphandle kwe-PowerShell. Ezihlokweni ezizayo kuzoxoxwa kabanzi ngalo magazini. Ngokungeziwe ezintweni ze-NET ne-COM, sizophinda sihlole izinto ze-CIM (WMI) kanye ne-ADSI.
Ukushayela Izindlela Eziqinile
Amanye amakilasi e-NET Core awakwazi ukuqinisekiswa, okuhlanganisa i-System.Environment kanye ne-System.Math. Kunjalo
[System.Environment] | Get-Member
Ukuze ubuke amalungu amile kuphela, shayela i-Get-Member ngepharamitha ye--Static (qaphela uhlobo lwento):
[System.Environment] | Get-Member -Static
Ukuze ufinyelele izakhiwo ezimile nezindlela, sebenzisa amakholoni amabili alandelanayo esikhundleni senkathi engemuva kwengokoqobo:
[System.Environment]::OSVersion
Noma
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Thayipha i-PSCustomObject
Phakathi kwezinhlobo eziningi zedatha ezitholakala ku-PowerShell, kufanelekile ukusho i-PSCustomObject, eklanyelwe ukugcina izinto ngesakhiwo esingenangqondo. Ukudala into enjalo usebenzisa i-New-Object cmdlet kuthathwa njengendlela yakudala, kodwa enzima futhi ephelelwe yisikhathi:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Ake sibheke ukwakheka kwento:
$object | Get-Member
Ukuqala nge-PowerShell 3.0, enye i-syntax iyatholakala:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Ungafinyelela idatha ngenye yezindlela ezifanayo:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Nasi isibonelo sokuguqula i-hashtable ekhona ibe into:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Enye yezinto ezimbi zezinto zalolu hlobo ukuthi ukuhleleka kwezakhiwo zabo kungashintsha. Ukuze ugweme lokhu, kufanele usebenzise isibaluli [esi-odwe]:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Kukhona ezinye izinketho zokwenza into: ngenhla sibheke ukusebenzisa i-cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
I-Engeza-Ilungu cmdlet ikuvumela ukuthi ungeze izakhiwo kuphela, kodwa nezindlela entweni ye-$ eyakhiwe ngaphambilini ngokusebenzisa ukwakhiwa kwe-"-MemberType ScriptMethod":
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Sicela uqaphele ukuthi sisebenzise i-$ScriptBlock eguquguqukayo yohlobo lwe-ScriptBlock ukuze sigcine ikhodi yendlela entsha.
Ukuze ususe izakhiwo, sebenzisa indlela ehambisanayo:
$object.psobject.properties.remove('Name')
Ukudala Amakilasi Akho
I-PowerShell 5.0 yethule ikhono lokuchaza
class MyClass
{
# тело класса
}
Lolu uhlobo lweqiniso lwe-NET Core, olunomzimba ochaza izakhiwo zawo, izindlela, nezinye izici. Ake sibheke isibonelo sokuchaza ikilasi elilula kakhulu:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Ukwakha into (isibonelo sekilasi), sebenzisa i-cmdlet
$object = New-Object -TypeName MyClass
noma
$object = [MyClass]::new()
Ake sihlaziye ukwakheka kwento:
$object | Get-Member
Ungakhohlwa mayelana nobubanzi: awukwazi ukubhekisela kuhlobo lwegama njengeyunithi yezinhlamvu noma usebenzise uhlobo lwangempela olungaphandle kweskripthi noma imojuli lapho isigaba sichazwa khona. Kulokhu, imisebenzi ingabuyisela izimo zekilasi (izinto) ezizofinyeleleka ngaphandle kwemojuli noma iskripthi.
Ngemva kokudala into, gcwalisa izakhiwo zayo:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Qaphela ukuthi incazelo yekilasi ayicacisi kuphela izinhlobo zezakhiwo, kodwa futhi namanani azo azenzakalelayo:
class Example
{
[string]$Name = 'John Doe'
}
Incazelo yendlela yekilasi ifana nencazelo yomsebenzi, kodwa ngaphandle kokusebenzisa igama lomsebenzi. Njengomsebenzi, amapharamitha adluliselwa ezindleleni uma kunesidingo:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Manje ummeleli wekilasi lethu angamamatheka:
$object = [MyClass]::new()
$object.Smile($true)
Izindlela zingalayishwa kakhulu; ngaphezu kwalokho, ikilasi linayo
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Incazelo yethu yokusebenza ngezinto ku-PowerShell ayipheleli neze. Ezincwadini ezilandelayo, sizozama ukujulisa ngezibonelo ezisebenzayo: isihloko sesihlanu ochungechungeni sizonikezwa ezindabeni zokuhlanganisa i-PowerShell nezingxenye zesofthiwe yomuntu wesithathu. Izingxenye ezedlule zingatholakala kuzixhumanisi ezingezansi.
Source: www.habr.com